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