Laravel Lighthouse:在相关模型上使用@paginate 会破坏直接查询模型的能力
Laravel Lighthouse: Using @paginate on related models breaks ability to query model directly
假设我们有系列和剧集,每个系列有很多剧集:
type Query {
series: [Series!]! @paginate(defaultCount: 10)
series(id: ID @eq): Series @find
episodes: [Episode!]! @paginate(defaultCount: 10)
episode(id: ID @eq): Episode @find
}
type Series {
id: ID!
title: String!
episodes: [Episode]! @hasMany
plot: String!
}
type Episode {
id: ID!
title: String!
season: Int!
series: Series! @belongsTo
plot: String!
}
一切正常。我们可以查询系列和剧集,它们是分页的。
Lighthouse 文档说我们还可以通过在 @hasMany
指令 (https://lighthouse-php.com/master/api-reference/directives.html#hasmany) 上设置 type
来分页关系,如下所示:
type Series {
id: ID!
title: String!
episodes: [Episode]! @hasMany(type: "paginator")
plot: String!
}
这在查询这样的系列时工作正常:
query series {
series {
paginatorInfo {
total
currentPage
hasMorePages
}
data {
title
episodes {
paginatorInfo {
total
currentPage
hasMorePages
}
data {
title
}
}
}
}
}
系列及其剧集均已分页。
但是现在不能直接查询剧集了:
query episodes {
episodes {
paginatorInfo {
total
currentPage
hasMorePages
}
data {
title
}
}
}
这个 returns 错误 No class 'EpisodePaginator' was found for directive 'paginate'"
这到底是什么意思,我如何才能直接对相关模型和所有模型进行分页?
一切看起来都是正确的除了因为你有两个同名查询:
type Query {
series: [Series!]! @paginate(defaultCount: 10)
series(id: ID @eq): Series @find
}
您需要更改其中一项。我怀疑发生的事情是你用只抓取一个系列的查询覆盖了分页查询。
尝试将复数查询的名称更改为 allSeries
或类似名称,看看是否能解决您的问题。
这是一个错误,已在 v4.8.1 中修复https://github.com/nuwave/lighthouse/releases/tag/v4.8.1
假设我们有系列和剧集,每个系列有很多剧集:
type Query {
series: [Series!]! @paginate(defaultCount: 10)
series(id: ID @eq): Series @find
episodes: [Episode!]! @paginate(defaultCount: 10)
episode(id: ID @eq): Episode @find
}
type Series {
id: ID!
title: String!
episodes: [Episode]! @hasMany
plot: String!
}
type Episode {
id: ID!
title: String!
season: Int!
series: Series! @belongsTo
plot: String!
}
一切正常。我们可以查询系列和剧集,它们是分页的。
Lighthouse 文档说我们还可以通过在 @hasMany
指令 (https://lighthouse-php.com/master/api-reference/directives.html#hasmany) 上设置 type
来分页关系,如下所示:
type Series {
id: ID!
title: String!
episodes: [Episode]! @hasMany(type: "paginator")
plot: String!
}
这在查询这样的系列时工作正常:
query series {
series {
paginatorInfo {
total
currentPage
hasMorePages
}
data {
title
episodes {
paginatorInfo {
total
currentPage
hasMorePages
}
data {
title
}
}
}
}
}
系列及其剧集均已分页。
但是现在不能直接查询剧集了:
query episodes {
episodes {
paginatorInfo {
total
currentPage
hasMorePages
}
data {
title
}
}
}
这个 returns 错误 No class 'EpisodePaginator' was found for directive 'paginate'"
这到底是什么意思,我如何才能直接对相关模型和所有模型进行分页?
一切看起来都是正确的除了因为你有两个同名查询:
type Query {
series: [Series!]! @paginate(defaultCount: 10)
series(id: ID @eq): Series @find
}
您需要更改其中一项。我怀疑发生的事情是你用只抓取一个系列的查询覆盖了分页查询。
尝试将复数查询的名称更改为 allSeries
或类似名称,看看是否能解决您的问题。
这是一个错误,已在 v4.8.1 中修复https://github.com/nuwave/lighthouse/releases/tag/v4.8.1