Graphql 如何在Hasura+Postgres中的'json'列和'int'(id)列之间创建关系?
我有两个表用户和帖子 表用户有id列和post列,该列包含[1,2,3,4,5]形式的数组,其中1,2,3,4,5是表post中的id 在表中,POST的id和文本列如下 表格用户: 表员额: 在哈苏拉做了一个数组关系 接下来,我提出了以下要求Graphql 如何在Hasura+Postgres中的'json'列和'int'(id)列之间创建关系?,graphql,hasura,Graphql,Hasura,我有两个表用户和帖子 表用户有id列和post列,该列包含[1,2,3,4,5]形式的数组,其中1,2,3,4,5是表post中的id 在表中,POST的id和文本列如下 表格用户: 表员额: 在哈苏拉做了一个数组关系 接下来,我提出了以下要求 { users_test { postz { id } } } 我希望收到这些数据作为回应: postz: [ { text: 'qwe' },
{
users_test {
postz {
id
}
}
}
我希望收到这些数据作为回应:
postz: [
{
text: 'qwe'
},
{
text: 'sdf'
}
]
但是有了这样的请求,我得到了线索。错误:
{
"errors": [
{
"extensions": {
"internal": {
"statement": "SELECT coalesce(json_agg(\"root\" ), '[]' ) AS \"root\" FROM (SELECT row_to_json((SELECT \"_5_e\" FROM (SELECT \"_4_root.ar.root.postz\".\"postz\" AS \"postz\" ) AS \"_5_e\" ) ) AS \"root\" FROM (SELECT * FROM \"public\".\"users_test\" WHERE ('true') ) AS \"_0_root.base\" LEFT OUTER JOIN LATERAL (SELECT coalesce(json_agg(\"postz\" ), '[]' ) AS \"postz\" FROM (SELECT row_to_json((SELECT \"_2_e\" FROM (SELECT \"_1_root.ar.root.postz.base\".\"id\" AS \"id\" ) AS \"_2_e\" ) ) AS \"postz\" FROM (SELECT * FROM \"public\".\"posts\" WHERE ((\"_0_root.base\".\"post\") = (\"id\")) ) AS \"_1_root.ar.root.postz.base\" ) AS \"_3_root.ar.root.postz\" ) AS \"_4_root.ar.root.postz\" ON ('true') ) AS \"_6_root\" ",
"prepared": true,
"error": {
"exec_status": "FatalError",
"hint": "No operator matches the given name and argument type(s). You might need to add explicit type casts.",
"message": "operator does not exist: json = integer",
"status_code": "42883",
"description": null
},
"arguments": [
"(Oid 114,Just (\"{\\\"x-hasura-role\\\":\\\"admin\\\"}\",Binary))"
]
},
"path": "$",
"code": "unexpected"
},
"message": "postgres query error"
}
]
}
我做错了什么?如何修复它?一些建议:
据我所知,你的查询中有一些拼写错误。尝试:
用户表上不需要post列。您只需要posts表上的user\u id列,以及分别使用表的user\u id和id列从posts表到users表的外键约束。请在此处查看文档:
如果出于某种原因必须使用post array列,则可以使用计算字段在json数组和另一个表的id之间创建关系。
你的职能是:
接受json数组列
提取id的
返回select*from表格,其中id在id中
例如:
计算字段定义位于:
运行以下查询:
# Get list of articles for each author
query {
authors {
id
name
articles
}
}
哇,这么全面的回应。但是,该链接中的计算视图现在返回一个错误。运行第二个查询时无法从对象中提取元素现在应该工作,@dazraf。有一个带有{}的行,而不是项目的数组
# Get list of articles for each author
query {
authors {
id
name
articles
}
}
# Get actual articles for each author
query {
authors {
id
name
owned_articles {
id
title
}
}
}