0

シリーズとエピソードがあり、各シリーズには多くのエピソードがあるとします。

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 のドキュメントによると、次のようにディレクティブ ( https://lighthouse-php.com/master/api-reference/directives.html#hasmany )を設定typeすることで、リレーションをページ付けすることもできます。@hasMany

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'"それは正確にはどういう意味ですか?また、関連するモデルとすべてのモデルの両方を直接ページ分割する機能を取得するにはどうすればよいですか?

4

2 に答える 2

1

同じ名前のクエリが 2 つあるという事実を除いて、すべてが正しいように見えます。

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

それらのいずれかを変更する必要があります。何が起こっているのかは、ページ分割されたクエリを単一のシリーズのみを取得するクエリで上書きしていると思われます。

複数形のクエリの名前を などに変更してみてallSeries、問題が解決するかどうかを確認してください。

于 2020-01-14T15:59:30.880 に答える