【问题标题】:Laravel Lighthouse: Using @paginate on related models breaks ability to query model directlyLaravel Lighthouse:在相关模型上使用 @paginate 会破坏直接查询模型的能力
【发布时间】:2020-01-18 22:43:05
【问题描述】:

假设我们有 Series 和 Episodes,并且每个 Series 都有很多 Episode:

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
    }
  }
}

这会返回错误No class 'EpisodePaginator' was found for directive 'paginate'" 这究竟是什么意思,我如何获得直接对相关模型和所有模型进行分页的能力?

【问题讨论】:

    标签: laravel graphql laravel-lighthouse


    【解决方案1】:

    这是一个错误,已在 v4.8.1 https://github.com/nuwave/lighthouse/releases/tag/v4.8.1 中修复

    【讨论】:

      【解决方案2】:

      一切看起来都是正确的除了,因为您有两个同名的查询:

      type Query {
        series: [Series!]! @paginate(defaultCount: 10)
        series(id: ID @eq): Series @find
      }
      

      您将需要更改其中之一。我怀疑正在发生的事情是您正在用只抓取一个系列的分页查询覆盖。

      尝试将复数查询的名称更改为 allSeries 或类似名称,看看是否能解决您的问题。

      【讨论】:

      • 谢谢。我试过你的建议,但我仍然得到同样的错误。我相信 Lighthouse 会根据提供的参数(即series {}series(id: 1) {})来决定使用哪个查询,因为查询它们中的任何一个都没有问题。另外,我认为在查询episodes 时甚至不涉及series 查询是吗?
      • @spawnia 好的。不过,这不是我遇到的问题的根源。我尝试按照建议将第一个更改为 allSeries,但仍然遇到相同的错误。
      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 2020-04-18
      • 2017-11-04
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 2016-05-04
      • 2014-01-18
      相关资源
      最近更新 更多