hasura - Hasura - 查询标签 - 空数组应该返回所有结果,但只返回带有标签的项目
问题描述
我有一个查询:
query SearchProductData($tagId: [Int!]) {
product(where: { productTags: {_or: {tagId: {_in: $tagId}}}}) {
id
name
productTags {
tag {
id
name
}
}
}
}
我传入一个变量
{"tagId": null}
我想取回所有产品,无论它们是否应用了标签。但是会发生什么,它只检索应用了标签的项目,不包括没有标签的项目。
数据库架构是
|- product
|
|-- productTags (one to many linking table of productIDs and tagIDs)
|
|--- tags
任何想法如何为这个用例编写查询?
解决方案
这是预期的,因为 where 子句如何转换为连接(您可以通过单击 GraphiQL 控制台中的分析来查看生成的 SQL 和执行计划查询分析。)
我认为不注入布尔表达式是不可能的。见下文:
例如
query Test($expression: product_bool_exp) {
product(where: $expression) {
id
name
product_tags {
tag {
id
name
}
}
}
}
有论据
{
"expression": {"product_tags": {"tag_id": {"_in": [2]}}}
}
返回:
{
"data": {
"product": [
{
"id": 1,
"name": "product_A",
"product_tags": [
{
"tag": {
"id": 1,
"name": "tag_1"
}
},
{
"tag": {
"id": 2,
"name": "tag_2"
}
}
]
}
]
}
}
而对于使用相同查询的另一种情况(没有传入标签,因此所有产品我们都可以使用这个变量值:
{
"expression": null
}
而我们回来...
{
"data": {
"product": [
{
"id": 1,
"name": "product_A",
"product_tags": [
{
"tag": {
"id": 1,
"name": "tag_1"
}
},
{
"tag": {
"id": 2,
"name": "tag_2"
}
}
]
},
{
"id": 4,
"name": "product_D",
"product_tags": []
}
]
}
}
因此,您可以动态构造 where 表达式并将其作为参数传递给查询。
推荐阅读
- javascript - 删除所有包含相同键且至少有一个值为 true 的对象数组
- python - Tkinter GUI:添加图像并更改颜色
- node.js - 如何在 NodeJS 和 Mongodb 中存储多个个人资料图片?
- angular - 如果页面的图像仍在加载,离子/角度模态控制器模态将不会打开
- api - 带有后端 API 和新 B2B API 的 SPA - 如何部署
- python - python中的数字序列
- python - Yocto QtCore/QtCoremod.sip 未找到
- javascript - nodemon server.js 在 vs 代码中执行
- opencv - 不同光照条件下透明瓶中颜色的识别
- php - 如何让用户在注销后不返回仪表板?