Как сделать запрос API данных Hasura для выборки строк на основе длины значения их отношения массива?
Ссылаясь на образец схемы по умолчанию, упомянутый в https://hasura.io/hub/project/hasura/hello-world/data-apis то есть в следующие две таблицы:
1) автор: идентификатор, имя
2) статья: идентификатор, заголовок, контент, рейтинг, author_id
где article:author_id
имеет отношение к массиву author:id
,
Как мне сделать запрос, чтобы выбрать авторов, которые написали хотя бы одну статью? В принципе, что-то вроде select author where len(author.articles) > 0
1 ответ
TL;DR:
Нет никаких length
функция, которую вы можете использовать в синтаксисе данных данных Hasura прямо сейчас. Обходной путь 1) Фильтр для свойства, которое гарантированно будет истинным для каждой строки. подобно id > 0
, 2) Создайте представление и предоставьте API на свое представление.
Опция 1:
Используйте атрибут "всегда верно" в качестве фильтра.
{
"type": "select",
"args": {
"table": "author",
"columns": [
"*"
],
"where": {
"articles": {
"id": {
"$gt": "0"
}
}
}
}
}
Это читается как: select all authors where ANY article has id > 0
Это работает, потому что id
это автоинкрементный int.
Вариант 2:
Создайте представление и затем представьте API данных на них.
Перейдите в окно "Выполнить SQL" в консоли API и запустите миграцию:
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)
Убедитесь, что вы отметили это как миграцию (флажок под окном Run SQL), чтобы это было добавлено в вашу папку миграций. Теперь добавьте API данных в представление, нажав "Таблица отслеживания" на странице схемы консоли API.
Теперь вы можете делать запросы на выборку, используя no_articles в качестве атрибута длины:
{
"type": "select",
"args": {
"table": "author_article_count",
"columns": [
"*"
],
"where": {
"no_articles": {
"$gt": "0"
}
}
}
}