0

我有一个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}
`;
4

2 回答 2

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}
`;
于 2019-09-11T19:03:50.410 回答
1

二级数据基本上是 Hasura 中的嵌套对象查询。只要已创建关系,您就可以嵌套任意数量的查询。

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

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

这是创建关系的官方文档链接

于 2019-09-11T06:46:23.027 回答