PostgreSQL 中,要查詢 item 是否在 JSON list (array) 中的語法是:
where user_list::jsonb ? 'user name'
如果使用 DB:raw()
代入 Laravel Eloquent 會出現錯誤訊息:
-- where(DB::raw('user_list::jsonb ? \'user name\''))->get()
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$1"
原因是 ?
會被視為 prepare/binding 的記號,上面語法沒有給定 bind 條件,所以發生錯誤。
若不使用 prepare/binding,則要 ?
escape 為 ??
:
-- where(DB::raw('user_list::jsonb ?? \'user name\''))->get()
Illuminate\Database\Eloquent\Collection {#6157
....
}