Dette er en løsning på mit problem. Det løser problemet ved at bruge PostgreSQL-funktionen til at erstatte ?
operatør.
Jeg kan ikke rigtig lide det, fordi det ikke gør PDO mere overholdelse af PostgreSQL. Men jeg fandt ingen reel løsning.
CREATE FUNCTION json_key_exists(JSONB,TEXT) RETURNS BOOLEAN LANGUAGE SQL STABLE AS $f$
SELECT $1 ? $2
$f$;
Og nu kan jeg bruge forespørgslen:
SELECT * FROM post WHERE json_key_exists(locations, :location);
Løsningen blev foreslået af den fantastiske RhodiumToad fra freenode #postgresql
Rediger
Som @Abelisto foreslog, er det ikke nødvendigt at oprette funktionen ovenfor som jsonb_exists(jsonb, text)
er avialabe