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