【问题标题】:How to reshape a GraphQL (via Hasura) query response?如何重塑 GraphQL(通过 Hasura)查询响应?
【发布时间】:2020-01-12 22:10:04
【问题描述】:

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

但是,Gifted Chat react-native 组件需要特定结构中的数据,因此我尝试使用下面的查询对其进行转换。

我可以为所有顶级数据设置别名,但不知道如何添加嵌套级别的数据。

我猜这是不可能的,但我想我会问一下,以防我遗漏了什么。

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}
`;

【问题讨论】:

    标签: graphql hasura


    【解决方案1】:

    假设您已经设置了 chat_message.user_id -&gt; 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}
    `;
    

    【讨论】:

      【解决方案2】:

      二级数据基本是哈苏拉中的nested object queries。只要已创建关系,您就可以嵌套任意数量的查询。

      在这种情况下,假设chat_message表有一个user_id字段,则可以为chat_message.user_id -&gt; users.id建立外键约束,其中users是以id为主键的表。

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

      这是Creating a relationship的官方文档链接

      【讨论】:

      • 感谢@praveenweb。我们已经有了关系。鲍勃的回答专门解决了这个问题。 ?
      猜你喜欢
      • 2020-12-08
      • 2021-10-02
      • 2020-08-13
      • 2020-05-21
      • 2020-04-26
      • 2020-07-02
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多