Фильтр 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#embedded-filters-and-order, похоже, это предназначено:


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

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


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


person Chris Stryczynski    schedule 07.07.2017    source источник


Ответы (1)


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

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

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

person Ruslan Talpa    schedule 07.07.2017
comment
Есть ли способ сделать это? - person Chris Stryczynski; 07.07.2017
comment
Начните с другого конца с /joblist в качестве верхнего уровня. - person Ruslan Talpa; 07.07.2017
comment
Другие варианты — это представление, выполняющее соединение, или хранимая процедура. - person Ruslan Talpa; 07.07.2017
comment
О, вид с присоединением. Да, это сработало бы идеально! - person Chris Stryczynski; 07.07.2017
comment
На самом деле это не так, поскольку в списке заданий есть отношения «многие к одному» ... Таким образом, результаты будут иметь потенциальные дубликаты. - person Chris Stryczynski; 07.07.2017