GraphQL:从突变中的另一个表中查询值

时间:2019-07-09 17:18:06

标签: graphql graphiql postgraphile postgraphql

假设我有一个表t1,该表是到另一个表t2的外键。为简单起见,t2仅具有唯一的列“名称”和“ id”。我将ID存储在t1中。

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

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

我最终遇到这样的情况,我传入了一个已知名称,但我想存储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(Here's the GitHub)的嵌套突变插件,但是我没有任何吸引力。这不是我想要的。

1 个答案:

答案 0 :(得分:0)

对于简单的关系,我相信您需要类似的东西:(使用嵌套的变异插件)。这仅适用于CREATE。 UPSERT没有运气。

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