如何重塑GraphQL(通过Hasura)查询响应?

时间:2019-09-11 05:48:33

标签: graphql hasura

我有一个CHAT_MESSAGE_FRAGMENT,它从Hasura graphql api返回所有消息数据。

但是,“天才聊天”反应本机组件需要特定结构的数据,因此我尝试通过以下查询将其转换。

我能够为所有顶级数据添加别名,但无法弄清楚如何添加嵌套数据。

我猜不可能,但是我想问一下我是否错过了一些东西。

const GIFTED_CHAT_GROUP_MESSAGES_QUERY = gql`
  query chatGroupMessages($chatGroupId: Int!) {
    chat_message(
      where: { to: { id: { _eq: $chatGroupId } } }
    ) {
      _id: id,
      # user: {
      #   _id: from.id,     <== How do I add
      #   name: from.name,  <== this secondary level?
      # },
      text: message,
      image: image_url,
      createdAt: created_at,
      system: message_type,
    }
  }
  ${CHAT_MESSAGE_FRAGMENT}
`;

2 个答案:

答案 0 :(得分:2)

假设您已经设置了chat_message.user_id -> users.id外键约束,除了为别名的任何嵌套字段加上别名之外,还需要为from对象加上别名:

const GIFTED_CHAT_GROUP_MESSAGES_QUERY = gql`
  query chatGroupMessages($chatGroupId: Int!) {
    chat_message(
      where: { to: { id: { _eq: $chatGroupId } } }
    ) {
      _id: id,
      from: user: {
        _id: id,
        name
      },
      text: message,
      image: image_url,
      createdAt: created_at,
      system: message_type,
    }
  }
  ${CHAT_MESSAGE_FRAGMENT}
`;

答案 1 :(得分:1)

在Hasura中,二级数据基本上是nested object queries。只要建立了关系,您就可以嵌套任意数量的查询。

在这种情况下,假设chat_message表具有user_id字段,则可以为chat_message.user_id -> users.id建立外键约束,其中users是具有{{ 1}}作为主键。

创建外键约束后,Hasura控制台会自动建议关系。这里的iduser表中的对象关系。

这是Creating a relationship

的官方文档链接