gpt4 book ai didi

javascript - GraphQL 如何做一个 JOIN 请求而不是许多顺序请求?

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:23 24 4
gpt4 key购买 nike

我有两个 GraphQL 类型:

type Author {
id: String!
name: String!
}

type Book {
id: String!
author: Author!
name: String!
}

在我的数据库中,它是通过 books 表中的外键实现的:

表作者(伪代码)

`id` INTEGER UNSIGNED
`name` STRING

表格书籍(伪代码)

`id` INTEGER UNSIGNED
`author_id` INTEGER UNSIGNED REFERENCE `authors.id`
`name` STRING

所以当我解析一个 GraphQL 查询时:

query allTheBooks {
id
name
author {
id
name
}
}

我只想执行一个 SELECT SQL 查询,例如:

SELECT books.id, books.name, authors.id, authors.name
FROM books
LEFT JOIN authors ON authors.id = books.author_id

代替当前的:

SELECT books.id, books.name, books.author_id
FROM books

SELECT authors.id, authors.name
FROM authors
WHERE author.id = [one the the books.author_id of the first SELECT]

SELECT authors.id, authors.name
FROM authors
WHERE author.id = [one the the books.author_id of the first SELECT]

[...]

有没有办法知道在 GraphQL 解析器中查询了哪些“子字段”?

预先感谢您的回答!

最佳答案

我刚刚发现在解析器给出的第四个参数中,有一个查询字段的数组:info.fieldNodes[0].selectionSet.selections

我没有找到任何关于此的文档,我想知道什么代表 fieldNodes 数组...(并且不喜欢在不知道它的情况下以这种方式访问​​第一个元素...)。

selections 对象包含如下数组:

[
{
kind: 'Field',
alias: undefined,
name: { kind: 'Name', value: 'id', loc: [Object] },
arguments: [],
directives: [],
selectionSet: undefined,
loc: { start: 36, end: 38 }
},
{
[...]
},
...
]

此处,value: 'id'匹配相关作者查询字段的名称。

如果我深入一个层次,selectionSet: undefined 变成一个对象,模式递归地重复自身...

关于javascript - GraphQL 如何做一个 JOIN 请求而不是许多顺序请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com