У меня две схемы:
var Player = new graphql.GraphQLObjectType({
name: 'Player',
fields: () => ({
id: { type: graphql.GraphQLString },
first_name: { type: graphql.GraphQLString },
last_name: { type: graphql.GraphQLString },
team: {
type: Team,
sqlJoin: (playerTable, teamTable, args) => `${playerTable}.team_id = ${teamTable}.id`
}
})
});
Player._typeConfig = {
sqlTable: 'player',
uniqueKey: 'id',
}
и
var Team = new graphql.GraphQLObjectType({
name: 'Team',
fields: () => ({
id: { type: graphql.GraphQLInt },
name: { type: graphql.GraphQLString },
})
})
Team._typeConfig = {
sqlTable: 'team',
uniqueKey: 'id'
}
У меня также есть 1 мутация и 1 запрос:
// Mutation
const MutationRoot = new graphql.GraphQLObjectType({
name: 'Mutation',
fields: () => ({
player: {
type: Player,
args: {
first_name: { type: graphql.GraphQLNonNull(graphql.GraphQLString) },
last_name: { type: graphql.GraphQLNonNull(graphql.GraphQLString) },
team_id: { type: graphql.GraphQLNonNull(graphql.GraphQLInt) },
},
resolve: (root, args) => {
return client.query("INSERT INTO player (first_name, last_name, team_id) VALUES ($1, $2, $3) RETURNING *", [args.first_name, args.last_name, args.team_id]).then(result=>{
console.log(result);
return result.rows[0];
})
}
}
})
})
и
// Query
const QueryRoot = new graphql.GraphQLObjectType({
name: 'Query',
fields: () => ({
player: {
type: Player,
args: { id: { type: graphql.GraphQLNonNull(graphql.GraphQLInt) } },
where: (playerTable, args, context) => `${playerTable}.id = ${args.id}`,
resolve: (parent, args, context, resolveInfo) => {
return joinMonster.default(resolveInfo, {}, sql => {
return client.query(sql)
})
}
}
})
В основном приложение может вставлять игрока и идентификатор команды, к которой он / она принадлежит.
При выполнении мутации (вставке записи) запись успешно добавляется, и я могу запросить правильные данные. Проблема заключается в том, что при вставке игрока и при запросе информации о команде GraphQL возвращает нулевое значение для команды.
mutation{
player(first_name:"Kobe", last_name:"Bryant", team_id:1) {
id
last_name
first_name
team{
id
name
}
}
}
Возвращает:
{
"data": {
"player": {
"id": "70",
"last_name": "Bryant",
"first_name": "Kobe",
"team": null
}
}
}
Однако при запросе игрока с идентификатором "70" информация о команде была успешно решена:
query{
player(id:70) {
id
team{
id
name
}
}
}
Возвращает:
{
"data": {
"player": {
"id": "70",
"team": {
"id": 1,
"name": "Los Angeles Lakers"
}
}
}
}
Есть идеи, что мне здесь не хватает?
Извините, если мое объяснение немного сбивает с толку, так как я все еще изучаю основы GraphQL. Большое спасибо!