Получаемая ошибка говорит о том, что между таблицами нет ограничения по внешнему ключу (т. Е. references events
), см. отношения в документации PostGraphile.Ваш запрос также недопустим, так как он добавляет аргументы, которые не существуют, в поле eventByEventId
: eventId
неявно, так как он уже существует в записи, которую вы запрашиваете.Если вы используете GraphiQL или аналогичную среду IDE 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');
А затем запустил последний постграф:
$ 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
}
}
}
}
}
Это все работает как положено:
![GraphiQL example](https://i.stack.imgur.com/nj44z.png)
PS: я бы рекомендовал использовать плагин @ graphile-contrib / pg-simpify-inflector для автоматического упрощенияназвания различных отношений.При использовании этого плагина командная строка будет выглядеть так:
postgraphile -c deleteme --append-plugins @graphile-contrib/pg-simplify-inflector
И запрос:
{
awards {
edges {
node {
awardId
event {
eventName
}
}
}
}
}