如何根据数组关系的值长度生成Hasura数据API查询以获取行?

时间:2018-02-07 11:15:01

标签: hasura

参考https://hasura.io/hub/project/hasura/hello-world/data-apis中提到的默认样本模式,即以下两个表:

1)作者:id,name

2)文章:id,title,content,rating,author_id

其中article:author_idauthor:id的数组关系。

如何进行查询以选择至少撰写过一篇文章的作者?基本上,像select author where len(author.articles) > 0

1 个答案:

答案 0 :(得分:1)

TL; DR:

您现在无法在Hasura数据API语法中使用length函数。解决方法1)过滤每个行保证为true的属性。像id > 0一样。 2)构建视图并在视图上公开API。

选项1:

使用'always true'属性作为过滤器。

{
    "type": "select",
    "args": {
        "table": "author",
        "columns": [
            "*"
        ],
        "where": {
            "articles": {
                "id": {
                    "$gt": "0"
                }
            }
        }
    }
}

读作:select all authors where ANY article has id > 0 这是有效的,因为id是一个自动递增的int。

选项2:

创建一个视图,然后在其上公开数据API。

前往API控制台中的“运行SQL”窗口并运行迁移:

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)

确保将此标记为迁移(RunSQL窗口下方的复选框),以便将其添加到迁移文件夹中。 现在,通过点击API控制台架构页面上的“Track table”,将数据API添加到视图中。

现在,您可以使用no_articles作为长度属性进行选择查询:

{
    "type": "select",
    "args": {
        "table": "author_article_count",
        "columns": [
            "*"
        ],
        "where": {
            "no_articles": {
                "$gt": "0"
            }
        }
    }
}