私は、それぞれ1人または複数の著者がいる記事を掲載するニュースサイトに取り組んでいます。著者の名前をクリックすると、その著者の情報と投稿した記事のリストを表示するページに移動します。
したがって、各記事にはauthors
プロパティがあり、これは次のプロパティを持つauthor
オブジェクトの配列です:フルネーム、スラッグ(スペースがダッシュに置き換えられたフルネームの小文字バージョン)など。
クエリを定義するときに、特定の作成者のスラッグで記事をフィルタリングすることは可能ですか?
query authorQuery($slug: String!) {
allContentfulArticle(filter: { //not sure what to do here }) {
edges {
node {
title
slug
authors {
name
slug
}
}
}
}
}
私の他のオプションは、すべての記事をロードしてから、次のようにコンポーネントにフィルターを設定することです。
const articles = data.allContentfulArticle.edges.filter(({ node }) => {
return node.authors.some((author) => author.slug === data.contentfulAuthor.slug);
});
これは世界の終わりではありませんが、必要なデータのみをロードするというGraphQLの原則に反します。
私が正しく理解していれば、ここで達成したいことは、著者ごとに記事をグループ化することです。次のように、クエリを実行してallContentfulAuthor
にフィルタを適用し、article
フィールドをリクエストすると、これを実現できます。
{
allContentfulAuthor(filter: {slug: {eq: "myslug"}}) {
edges {
node {
name
article {
title
slug
}
}
}
}
}
article
名は、記事のcontentTypeIdであることに注意してください。