🐈

hasura nested mutatoin

2023/07/08に公開

初めに

hasura graphql でよくわからないミューテーションがあったので調査した。

結論

relationを作成した先のデータの書き込みを nested mutation という仕組みでサポートしています。
つまり、table_aからtable_bへのリレーションがあるとき、table_aへの書き込みをするようにtable_bへの書き込みを1回のmutationで実施できます。

整理

公式:https://hasura.io/docs/latest/mutations/postgres/multiple-mutations/

nested mutationの例

mutation insert_article {
  insert_article(
    objects: [
      {
        title: "Article 1",
        content: "Sample article content",
        author: {
          data: {
            name: "Cory"
          }
        }
      }
    ]
  ) {
    affected_rows
    returning {
      id
      title
      author {
        id
        name
      }
    }
  }
}

この例だと、articleテーブルに書き込む時に、関連を持つauthorの情報としてnameを書き込む。
authorはリレーション名で、リレーションを生成しているフィールドとの値はこのmutationを実行した時に自動的に書き込まれる。
例えばm、article.author_id -> author.idの値でリレーションを持つとき、author_idには自動的にauthor.idが設定される。
逆向きのリレーションの場合も同じ。

今回の情報はhasuraの機能なので、その他のgraphqlサーバーでも同一なわけではないと思う。

最後に

graphqlの構文ってややこしくてよくわからない!って思うけど、便利な場面がありますね。

Discussion