我有以下的db设置
事件
| event_id | event_name |
|----------|------------|
| 1 | Test |
| 2 | World |奖项
| award_id | event_id | award_name |
|----------|----------|-------------|
| 1 | 1 | greatness |
| 2 | 2 | really good |我正在尝试查询数据库,如下所示:
{
allAwards {
edges {
node {
awardId
eventByEventId(eventId: eventId) {
year
name
country
location
date
dateCreated
}
}
}
}
}出现以下错误:
Cannot query field "eventByEventId" on type "Award". Did you mean "eventId"?",发布于 2019-06-26 15:56:46
您收到的错误提示您在表之间没有外键约束(即references events),请参阅PostGraphile文档中的relations。您的查询也是无效的,因为它向eventByEventId字段添加了不存在的参数:eventId是隐式的,因为它已经存在于您要查询的记录中。如果您使用GraphiQL或类似的GraphQL集成开发环境,它应该会向您显示查询与GraphQL模式不匹配的地方,甚至会提示您如何修复它。
我已经使用以下SQL重新创建了您的模式:
create table events (
event_id serial primary key,
event_name text
);
insert into events (event_name) values ('Test'), ('World');
create table awards (
award_id serial primary key,
event_id int references events, -- < THIS IS THE IMPORTANT BIT
award_name text
);
insert into awards (event_id, award_name) values (1, 'greatness'), (2, 'really good');然后对它运行了最新的postgraphile:
$ npx postgraphile@latest -c deleteme
npx: installed 119 in 11.26s
PostGraphile v4.4.1 server listening on port 5000 ?
‣ GraphQL API: http://localhost:5000/graphql
‣ GraphiQL GUI/IDE: http://localhost:5000/graphiql (enhance with '--enhance-graphiql')
‣ Postgres connection: postgres:///deleteme
‣ Postgres schema(s): public
‣ Documentation: https://graphile.org/postgraphile/introduction/
‣ Join Jimmy McBroom in supporting PostGraphile development: https://graphile.org/sponsor/
* * *并发出GraphQL查询:
{
allAwards {
edges {
node {
awardId
eventByEventId {
eventName
}
}
}
}
}这一切都如预期的那样工作:

PS:我建议你使用@graphile-contrib/pg-simplify-inflector插件来自动简化各种关系的名称。使用此插件,命令行将为:
postgraphile -c deleteme --append-plugins @graphile-contrib/pg-simplify-inflector和查询:
{
awards {
edges {
node {
awardId
event {
eventName
}
}
}
}
}发布于 2019-06-24 20:49:01
GraphQL不查询数据库,您使用的是什么中间件?
必须在GraphQL解析程序中定义eventByEventId。
https://stackoverflow.com/questions/56734931
复制相似问题