Фильтр 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