Фильтр Postgrest не работает с полями из связанной таблицы

Я хотел бы получить записи kiscourse где связанные joblist.job имеет значение, которое содержит tech в пределах joblist.job строковое значение.

Это возвращает ожидаемые результаты:

/joblist?select=job,kiscourse_id(*)&limit=10&job=ilike.*tech*

Это не:

/kiscourse?select=*,joblist(*)&limit=10&joblist.job=ilike.*tech*

И согласно: https://postgrest.com/en/v4.1/api.html, это, кажется, предназначено:


> GET /films?select=*,roles(*)&roles.character=in.Chico,Harpo,Groucho
> HTTP/1.1

Еще раз, это ограничивает роли, включенные в определенные персонажи, но никак не фильтрует фильмы. Фильмы без этих символов будут включены вместе с пустыми списками символов.


Есть ли способ выполнить вышеупомянутое (кроме процедур)?

2 ответа

joblist.job Фильтр, который у вас там, будет влиять только на сущности второго уровня, он не распространяется на первый уровень.

Способ прочитать этот запрос /kiscourse?select=*,joblist(*)&limit=10&joblist.job=ilike.*tech*это:

Дай мне 10 строк из kiscourse со всеми столбцами, и для каждой строки, я хочу joblists для этой строки, которые названы *tech*

Postgrest теперь поддерживает фильтрацию верхнего уровня , добавляя флаг в запрос выбора.

Из документов:

Чтобы отфильтровать строки верхнего уровня, вам нужно добавить!innerна встроенный ресурс. Например, чтобы получить только те фильмы, в которых есть актер по имениJehanne:

       GET /films?select=title,actors!inner(first_name,last_name)&actors.first_name=eq.Jehanne HTTP/1.1
Другие вопросы по тегам