【问题标题】:GraphQL (A = a AND B = b) OR (A = b AND B = a)GraphQL (A = a AND B = b) OR (A = b AND B = a)
【发布时间】:2021-11-28 23:54:11
【问题描述】:

我是 GraphQL 新手,我一直在尝试提出一个简单的查询,但没有得到我需要的结果。

基本上,我正在编写一个突变以在满足以下条件时删除一行:

(A = a AND B = b) OR (A = b AND B = a)

但是,我似乎不知道怎么写。

我尝试做类似的事情:

delete_links(where: {_or: {_and: {a: {_eq: a}, b: {_eq: b}}}, {_and: {a: {_eq: b}, b: {_eq: a}}}) {
affected_rows
  }
}

我在 postgresql 上使用 Hasura。

基本上我有一个叫做链接存储的表:

link_a | link_b

问题是链接中第 9 项和第 2 项之间的链接可以是:

link_a | link_b
2      | 9

或

link_a | link_b
9      | 2

因此我希望我的删除突变删除两个案例。但是我似乎无法查询(A = a AND B = b) OR (A = b AND B = a)

【问题讨论】:

  • 查询非常具体,它与您在服务器上的架构完全相关。向我们提供更多信息可能会有所帮助(例如,服务器架构、类型和位置的相关类型,您在后端使用的技术也有帮助)
  • @LongNguyen 嗨,我添加了更多信息。感谢您指出这一点。

标签: graphql graphql-js hasura


【解决方案1】:

由于_or,_and 是数组。所以,你的变异应该是这样的:

# in this example: typeof A = Int, typeof B = Int
mutation delete_links($a: Int, $b: Int) {
  delete_links(
    where: {
      _or: [
        { A: { _eq: $a }, B: { _eq: $b } }
        { A: { _eq: $b }, B: { _eq: $a } }
      ]
    }
  ) {
    affected_rows
  }
}

# if you'd like to use additional _and
mutation delete_links($a: Int, $b: Int) {
  delete_links(
    where: {
      _or: [
        { _and: [{ A: { _eq: $a } }, { B: { _eq: $b } }] }
        { _and: [{ A: { _eq: $b } }, { B: { _eq: $a } }] }
      ]
    }
  ) {
    affected_rows
  }
}

【讨论】:

  • 我希望控制台有更好的缩进和类型辅助/自动完成这些布尔运算符。
猜你喜欢
  • 2011-06-13
  • 2019-04-12
  • 1970-01-01
  • 2015-06-15
  • 2014-03-29
  • 2021-10-06
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
相关资源
最近更新 更多