Đây là một giải pháp cho vấn đề của tôi. Nó giải quyết vấn đề bằng cách sử dụng hàm PostgreSQL để thay thế ?
nhà điều hành.
Tôi không thực sự thích nó vì nó không làm cho PDO tuân thủ PostgreSQL nhiều hơn. Nhưng tôi không tìm thấy giải pháp thực sự nào.
CREATE FUNCTION json_key_exists(JSONB,TEXT) RETURNS BOOLEAN LANGUAGE SQL STABLE AS $f$
SELECT $1 ? $2
$f$;
Và bây giờ tôi có thể sử dụng truy vấn:
SELECT * FROM post WHERE json_key_exists(locations, :location);
Giải pháp được đề xuất bởi RhodiumToad tuyệt vời từ freenode #postgresql
Chỉnh sửa
Như @Abelisto đã đề xuất, không cần tạo hàm ở trên dưới dạng jsonb_exists(jsonb, text)
là avialabe