Detta är en lösning på mitt problem. Det löser problemet genom att använda PostgreSQL-funktionen för att ersätta ?
operatör.
Jag gillar det inte riktigt eftersom det inte gör PDO mer överensstämmelse med PostgreSQL. Men jag hittade ingen riktig lösning.
CREATE FUNCTION json_key_exists(JSONB,TEXT) RETURNS BOOLEAN LANGUAGE SQL STABLE AS $f$
SELECT $1 ? $2
$f$;
Och nu kan jag använda frågan:
SELECT * FROM post WHERE json_key_exists(locations, :location);
Lösningen föreslogs av den fantastiska RhodiumToad från freenode #postgresql
Redigera
Som @Abelisto föreslog finns det inget behov av att skapa funktionen ovan som jsonb_exists(jsonb, text)
är avialabe