首页 > 解决方案 > GraphQL:从突变中查询另一个表中的值

问题描述

假设我有一个表t1,它是另一个表的外键t2。为简单起见,t2只有列 'name' 和 'id' 都是唯一的。我将 id 存储在t1.

我的问题是我想写一个我知道名字的突变,但是当我去存储一些东西时我不知道 id t1。有没有办法在我的突变内部进行查询,以便转换我的语句中的值?

也许我可以添加到我的项目中的插件?

我最终得到这样的东西,我传入一个已知名称,但我想存储 id

mutation addT1(
  $knownT2Name: String!,
) {
  createT1 (
    input: {
      t1: {
        id: $component
        # Is there a way to convert this to the id inside the query
        # Or do I need to query for the id with the name first then pass that in?
        t2_id: $knownT2Name
      }
    }
  ) {
    t1 {
      id
      t2_id
    }
  }
}

这是一个简单的例子。我不想用名称查询 id 的原因实际上t1是外键对无数其他具有相同情况的表,我不想做 9+ 查询只是为了将每个字符串转换为一个整数 ID。

我宁愿能够做这样的事情:

mutation addT1(
  $knownT2Name: String!,
) {
  createT1 (
    input: {
      t1: {
        id: $component
        t2_id: t2Byt2(name: $knownT2Name) { id }
      }
    }
  ) {
    t1 {
      id
      t2_id
    }
  }
}

哪里t2Byt2(name: $knownT2Name) { id }会是一个子查询,它传递名称并获取 id,然后将 id 存储在“t2_id”中

我正在查看 postgraphile 的嵌套突变插件(这是 GitHub),但我没有任何吸引力。这不是我要找的。

标签: graphqlgraphiqlpostgraphilepostgraphql

解决方案


对于简单的关系,我相信你想要这样的东西:(使用嵌套突变插件)。这仅适用于 CREATE。UPSERT 不走运。

mutation addT1($t1Name: String!, $t2Name: String!) {
  createT1(
    input: { 
      T1: { 
        name: $t1Name, 
        t2ToT2: { connectByT2: { name: $t2Name } }
      }
    }
  ) {
    t1 {
      t1Id
      name
      t2ByT2 {
        name
      }
    }
  }
}

推荐阅读