我是靠谱客的博主 迅速茉莉,最近开发中收集的这篇文章主要介绍Graphql实现增删改查,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

图库结构

type.grahql
在这里插入图片描述

#学生信息
type Student {
 id: ID! #id
 name: String! @search(by: [hash regexp]) #姓名
 classes: String! @search(by: [hash regexp]) #班级
 sex:Int! @search #性别 01女
 rank: Int @search #排名
 old: Int @search #年龄
}

1. 查询

1.1简单查询

//studentGraphql.vue
<script>
import gql from "graphql-tag";

//sql语句
export default {
  fragments: {
	getStudent: gql`
		query Student(
	        $filter: StudentFilter
	        $offset: Int
	        $first: Int
	      ) {
	      //计算学生总数
	        aggregateStudentCount(filter: $filter) {
	          count
	        }
	        //学生相关属性
	        queryStudent(
	          filter: $filter
	          order: { desc: created }
	          offset: $offset
	          first: $first
	        ) {
	          id
	          name
	          classes
	          sex
	          rank
	          old
	        }
	      }
	`,
	},
};
</script>
//在vue中获取
studentList:[] //存储学生列表

getStudent(){
	//传入gql的参数格式
	var studentVariables = {
		//filter对应queryStudent下的参数
        filter: {
          id: [this.id],
          name: {}
        }
      };
    if(this.name){
    	//eq为普通索引,一般赋值时需带上,即 name:{eq:"小明"}
    	//id例外,直接用[],如:id:['x01']
    	studentVariables.filter.name.eq = this.name
    }
    	
	this.$apollo.addSmartQuery("studentList", {
		//no-cache:清空缓存,刷新表格时不会因为缓存而不更新表格内容
        fetchPolicy: "no-cache",
        query: studentGraphql.fragments.getStudent,
        variables() {
          return studentVariables;
        },
        //update方法是在数据输出前,对数据格式进行处理
        update(data) {
        //data为从图库拿到的数据
          console.log("numberHistoryVariables: ");
          console.log(data);

          var result = {
            pageTotal: 0, //总条数
            tableData: [], //表数据
          };
          result.tableData = data.queryStudent
          result.pageTotal = data.queryStudent.length
          
          return result;
        },
        result(res){
        //类似ajax的success,在请求成功后回调
          console.log(res)
        },
        error(error) {
        //类似ajax的error,在请求失败后回调
          console.error("getStudent", error);
        },
      });
}

1.2 比较查询

//查询排名小于10且年龄大于15的学生 如果要等于边界值10和15,则是le和ge
var cardNumberBatchVariables = {
    filter: {
      rank: {
        lt: 10,
      },
      //and与&&类似
      and: {
        age: {
          gt: 15,
        },
      },
    },
};

1.3 分页查询

  1. offset为偏移量,即从第几个开始返回;
  2. first为个数,从偏移量开始展示第几个;
  3. 当offset为0,first为10,即从第一个学生开始,返回10个10个学生数据;
  4. filter内的查询条件可以自己设定,比如name为学生名称,就可以返回指定名称的学生数据;

var studentVariables = {
	filter: {
	  name: {}, 
	},
	offset: offset //从第几个开始查
	first: pageSize //一页展示多少个
};

1.4 根据查询条件返回列表总数
设置多个filter,就不会彼此影响

	//sql语句
	getStudent: gql`
		query Student(
	        $filter: StudentFilter
	        $offset: Int
	        $first: Int
	        $filter2: StudentFilter
	        $offset2: Int
	        $first2: Int
	      ) {
	      //计算学生总数
	        aggregateStudentCount(filter: $filter) {
	          count
	        }
	        //计算名字重复的学生数量(需要在filter2内赋值)
	        repeatName:aggregateStudentCount(filter: $filter2) {
	          count
	        }
	        //学生相关属性
	        queryStudent(
	          filter: $filter
	          order: { desc: created }
	          offset: $offset
	          first: $first
	        ) {
	          id
	          name
	          classes
	          sex
	          rank
	          old
	        }
	      }
	`,
//vue中调用
var studentVariables = {
	filter:{},
	filter2: {
	  name: {'王小明'}, 
	},
	offset: offset //从第几个开始查
	first: pageSize //一页展示多少个
};

最终数据会返回repeatName字段,里面的count字段即是名字是’王小明’的学生的个数;
filter则对应aggregateStudentCount字段,如果filter为空,则返回学生的总数

2. 增加

2.1增加学生sql语句

//新增sql语句
    addPhoneNumber: gql`
      mutation addStudent(
        $addStudent: [AddStudentInput!]!
      ) {
        addStudent(input: $student) {
          student{
	          id
	          name
	          classes
	          sex
	          rank
	          old
          }
        }
      }
    `,

2.2 在vue中增加

	//学生gql入参
   var studentVariables = {
     cardNumberBatch: [
       {
         name: this.form.name,
         sex: this.form.sex,
         created: dateUtil.format(
           new Date(),
           "yyyy-MM-ddTHH:mm:ss+08:00"
         ),//图库的默认时间格式 传入时需更改好格式
       },
     ],
   };
	//gql
    this.$apollo
      .mutate({
        mutation: studentGraphql.fragments.addStudent,
        variables: studentVariables,
        update: (store, { data: { addTag } }) => {},
        optimisticResponse: {
          __typename: "Mutation",
          addTag: {},
        },
      })
      .then((data) => {
        console.log("您已新增成功!");
      })
      .catch((error) => {
        console.error("addStudent", null, null, error);
      });

3. 修改

3.1 修改sql语句

//修改sql语句
    updateStudent: gql`
      mutation updateStudent($patch: UpdateStudentInput!) {
        updateStudent(input: $patch) {
          student{
	          id
	          name
	          classes
	          sex
	          rank
	          old
          }
        }
      }
    `,

3.2 在vue中修改

//修改号码组gql入参
var updateStudentVariables = {
  patch: {
    filter: {
      id: [this.form.id],//学生对应id,唯一
    },
    set: {
      name: this.form.name,
      rank: this.form.rank1,
      updated: dateUtil.format(new Date(), "yyyy-MM-ddTHH:mm:ss+08:00"),//图库的默认时间格式
    },
  },
};

//sql语句
	this.$apollo
	   .mutate({
	     mutation: studentGraphql.fragments.updateStudent,
	     variables: updateStudentVariables,
	     update: () => {},
	     optimisticResponse: {
	       __typename: "Mutation",
	       addTag: {},
	     },
	   })
	   .then((data) => {
	     console.log("您已修改成功!")
	   })
	   .catch((error) => {
	     console.error("updateStudent", null, null, error);
	   });

4. 删除

4.1 删除sql语句

//删除号码
  deleteStudent: gql`
    mutation deleteStudent($filter: StudentFilter!) {
      deleteStudent(filter: $filter) {
        msg
        student{
          id
          name
          classes
          sex
          rank
          old
         }
      }
    }
  `,

4.2 在vue中删除

	//删除学生sql入参
      var deleteStudentVariables = {
        filter: {
          id: ids,//可以传入一个数组,如['0x1','0x2']
        },
      };
      
	//删除gql
   this.$apollo
     .mutate({
       mutation: studentGraphql.fragments.deleteStudent,
       variables: deleteStudentVariables,
       update: () => {},
       optimisticResponse: {
         __typename: "Mutation",
         addTag: {},
       },
     })
     .then((data) => {
       console.log("您已删除成功!");
     })
     .catch((error) => {
       console.error("deleteStudent", null, null, error);
     });

最后

以上就是迅速茉莉为你收集整理的Graphql实现增删改查的全部内容,希望文章能够帮你解决Graphql实现增删改查所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部