如何重塑 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.
中的对象关系
的官方文档 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}
`;
我有一个 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.
假设您已经设置了 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}
`;