To jest obejście mojego problemu. Rozwiązuje problem za pomocą funkcji PostgreSQL do zastąpienia ?
operatora.
Nie podoba mi się to, ponieważ nie zapewnia większej zgodności PDO z PostgreSQL. Ale nie znalazłem prawdziwego rozwiązania.
CREATE FUNCTION json_key_exists(JSONB,TEXT) RETURNS BOOLEAN LANGUAGE SQL STABLE AS $f$
SELECT $1 ? $2
$f$;
A teraz mogę użyć zapytania:
SELECT * FROM post WHERE json_key_exists(locations, :location);
Rozwiązanie zostało zasugerowane przez fantastyczny RhodiumToad z freenode #postgresql
Edytuj
Jak zasugerował @Abelisto, nie ma potrzeby tworzenia powyższej funkcji jako jsonb_exists(jsonb, text)
jest dostępny