首页 > 解决方案 > 为更新 GraphQL Apollo 中的表制作正确的架构和解析器

问题描述

我正在尝试更新 Postgres 数据库的两个字段:

const update_din_times_for_rep = gql`
  mutation update_din_times_for_rep(
    $id: Int!
    $name: String
    $val: String
  ) {
    update_din_times_for_rep(id: $id, name: $name, val: $val) {
      id
    }
  }
`;

下一个:

const [data_din_times_for_rep, { loading:loadingMutation, error:errorMutation }] = useMutation(update_din_times_for_rep);

和处理程序:

let handlerMutation = () => {
    data_din_times_for_rep({ variables: { id } });
  }
<Button onClick={handlerMutation}>Test!</Button>

似乎resolvers.js中的错误,但尝试了很多,没有结果:

update_din_times_for_rep: (parent, args) => {
           const mytmp = {
            id: args.id,
            name: args.name,
            val: args.val,
          }
            return Time_windows
        }

如何使解析器尽可能简单?现在唯一的解析器部分对我来说很困难,请任何建议?解析器是由另一个人编写的,我需要根据我的情况对其进行修改。

更新。 如何更改resolver.js以便将数据写入数据库?我做了一个修改:

update_din_times_for_rep: (parent, args) => {
           const mytmp = {
            id: args.id,
            name: args.name,
            val: args.val,
          }
            return Time_windows
        }

但我不明白下一步该做什么,我试着按照网上找到的几个例子。他们中的大多数只使用数组或对象,或者磁盘上的平面 db 文件。没有任何示例清楚地显示如何将真实 postgres 数据库的突变处理为 react->resolver-schema-tables-update db。

就我而言,我确实正确地做出了反应-> 模式表。但不是解析器部分。我的模式在类型 Query 和类型 Mutation 部分中声明为查询和变异:

type Time_windows {
        id: Bigint
        name: String
        val: String
    }

标签: reactjsgraphqlapollo

解决方案


经过多次尝试,我发现了一个最小的工作代码:

update_din_times_for_rep: async (parent, args) => {
            const mytmp = { id: args.id,
            name: args.name,
            val: args.val,
            }
           await client.query(`insert into din_times_for_rep (id,val) values ('${mytmp.id}','${mytmp.name}')`);
        }

如果有人添加评论或改进会很好。


推荐阅读