我有一个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}
`;
答案 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控制台会自动建议关系。这里的id
是user
表中的对象关系。