如何进行 Hasura 数据 API 查询以根据数组关系值的长度获取行?
How do I make a Hasura data API query to fetch rows based on the length of the their array relationship's value?
参考https://hasura.io/hub/project/hasura/hello-world/data-apis中提到的默认示例模式,即以下两个表:
1) 作者: id,name
2) article: id, title, content, rating, author_id
其中 article:author_id
与 author:id
.
有数组关系
如何查询 select 位至少写过一篇文章的作者?基本上,像 select author where len(author.articles) > 0
TL;DR:
目前没有可以在 Hasura 数据 API 语法中使用的 length
函数。解决方法 1) 在保证对每一行都为真的 属性 上进行过滤。喜欢id > 0
。 2) 构建一个视图并在您的视图上公开 APIs。
选项 1:
使用 'always true' 属性作为过滤器。
{
"type": "select",
"args": {
"table": "author",
"columns": [
"*"
],
"where": {
"articles": {
"id": {
"$gt": "0"
}
}
}
}
}
这读作:select all authors where ANY article has id > 0
这是有效的,因为 id
是一个自动递增的整数。
选项 2:
创建视图,然后在其上公开数据 API。
前往 API 控制台中的 运行 SQL window 并 运行 迁移:
CREATE VIEW author_article_count as (
SELECT au.*, ar.no_articles
FROM
author au,
(SELECT author_id, COUNT(*) no_articles FROM article GROUP BY author_id) ar
WHERE
au.id = ar.author_id)
确保将此标记为迁移(运行SQL window 下方的复选框),以便将其添加到您的迁移文件夹中。
现在,通过在 API 控制台的架构页面上点击 "Track table",将数据 API 添加到视图中。
现在您可以使用 no_articles 作为长度属性进行 select 查询:
{
"type": "select",
"args": {
"table": "author_article_count",
"columns": [
"*"
],
"where": {
"no_articles": {
"$gt": "0"
}
}
}
}
参考https://hasura.io/hub/project/hasura/hello-world/data-apis中提到的默认示例模式,即以下两个表:
1) 作者: id,name
2) article: id, title, content, rating, author_id
其中 article:author_id
与 author:id
.
如何查询 select 位至少写过一篇文章的作者?基本上,像 select author where len(author.articles) > 0
TL;DR:
目前没有可以在 Hasura 数据 API 语法中使用的 length
函数。解决方法 1) 在保证对每一行都为真的 属性 上进行过滤。喜欢id > 0
。 2) 构建一个视图并在您的视图上公开 APIs。
选项 1:
使用 'always true' 属性作为过滤器。
{
"type": "select",
"args": {
"table": "author",
"columns": [
"*"
],
"where": {
"articles": {
"id": {
"$gt": "0"
}
}
}
}
}
这读作:select all authors where ANY article has id > 0
这是有效的,因为 id
是一个自动递增的整数。
选项 2:
创建视图,然后在其上公开数据 API。
前往 API 控制台中的 运行 SQL window 并 运行 迁移:
CREATE VIEW author_article_count as (
SELECT au.*, ar.no_articles
FROM
author au,
(SELECT author_id, COUNT(*) no_articles FROM article GROUP BY author_id) ar
WHERE
au.id = ar.author_id)
确保将此标记为迁移(运行SQL window 下方的复选框),以便将其添加到您的迁移文件夹中。 现在,通过在 API 控制台的架构页面上点击 "Track table",将数据 API 添加到视图中。
现在您可以使用 no_articles 作为长度属性进行 select 查询:
{
"type": "select",
"args": {
"table": "author_article_count",
"columns": [
"*"
],
"where": {
"no_articles": {
"$gt": "0"
}
}
}
}