Ini adalah solusi untuk masalah saya. Ini memecahkan masalah dengan menggunakan fungsi PostgreSQL untuk menggantikan ?
operator.
Saya tidak terlalu menyukainya karena tidak membuat PDO lebih sesuai dengan PostgreSQL. Tapi saya tidak menemukan solusi nyata.
CREATE FUNCTION json_key_exists(JSONB,TEXT) RETURNS BOOLEAN LANGUAGE SQL STABLE AS $f$
SELECT $1 ? $2
$f$;
Dan sekarang saya dapat menggunakan kueri:
SELECT * FROM post WHERE json_key_exists(locations, :location);
Solusinya disarankan oleh RhodiumToad yang luar biasa dari freenode #postgresql
Sunting
Seperti yang disarankan @Abelisto, tidak perlu membuat fungsi di atas sebagai jsonb_exists(jsonb, text)
adalah avialabe