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

How to reshape a GraphQL (via Hasura) query response?

我有一个 CHAT_MESSAGE_FRAGMENT returns 来自我的 Hasura graphql api 的所有消息数据 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}
`;

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

在这种情况下,假设chat_message table有一个user_id字段,你可以为chat_message.user_id -> users.id建立一个外键约束,其中users是一个 table,id 作为主键。

创建外键约束后,Hasura 控制台会自动建议关系。这里 user 将是 chat_message table.

中的对象关系

这是 Creating a relationship

的官方文档 link

假设您已经设置了 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}
`;