Category
モデル
Category
モデルを作成、この状況についてもう少し考えることは間違いなく行く方法です。
たとえば、読者がお気に入りのカテゴリに後で登録できるようにしたいとします。または、既存のすべてのカテゴリのリストが必要な場合はどうなりますか?文字列リストを使用すると、すべての書籍を照会し、取得したすべてのカテゴリーを後処理する必要があります。文字列リストを使用するのではなく、モデルレベルでこれを処理する方がずっと自然です。
代わりに、新しいCategory
モデルを作成し、Category
とBook
の間に多対多の関係を追加できます。このような状況では、一意の列挙型フィールドtag
と文字列フィールドtext
を追加したいと思います。 (ユニークな文字列フィールドtag
だけでも適切でしょう、おそらく味の問題です。)
この設定を使用すると、簡単にブックは、特定のカテゴリに割り当てられている
のようなデータの要件を満たすことができますか?本は与えられたリストのうちの少なくとも一つのカテゴリに割り当てられている
query {
# query books by unique category tag
Category(tag: MYSTERY) {
books {
id
}
}
# query books by specific category text
Category(filter: {
text: "mystery"
}) {
books {
id
}
}
}
?本は与えられたリストのすべてのカテゴリに割り当てられている
query {
allCategories(filter: {
OR: [{
tag: MYSTERY
}, {
tag: MAGIC
}]
}) {
books {
id
}
}
}
?
query {
allCategories(filter: {
AND: [{
tag: MYSTERY
}, {
tag: MAGIC
}]
}) {
books {
id
}
}
}
関連フィルター上のクエリは、指定されたデータの要件を満たしていても
、書籍は、私たちは、クライアント上のグループをフラット化しなければならないことを意味し、対応してCategory
によってグループ化されています。
関連するフィルタを使用すると、関連するカテゴリを定義した条件に基づいて書籍を取得することができます。
query {
allBooks(filter: {
OR: [{
categories_some: {
tag: MYSTERY
},
categories_some: {
tag: MAGIC
}
}]
}) {
id
}
}
これは現在ありませんがGraphcoolでサポートされています。たとえば
は、与えられたリストの少なくとも一つのカテゴリに割り当てられ本を照会します。私はこれを追跡する機能リクエストを追加しました:https://github.com/graphcool/feature-requests/issues/60 – sorenbs
これは知っておきたいことです。私はあなたの問題を+1します。すぐにこれを手に入れることができるようにしましょう! – gCardinal
現在の回避策は、 'Book'に多対多の関係を持つ新しいモデル' Category'を導入することかもしれません。次に、あなたはこれを行うことができます: 'allCategories(フィルタ:{tag:" mystery "}){books {id}}'。私は、 'Category'モデルを将来のメタデータなどのために有利にすることができると思います。 – marktani