Laravel whereRaw - как избежать '?' - PullRequest
       8

Laravel whereRaw - как избежать '?'

0 голосов
/ 17 октября 2019

Есть ли способ избежать "?"в красноречивом заявлении whereRaw? (Используя laravel 6.x)

пример:

ExampleModel::whereRaw(' "table"."json_field"::jsonb ?| array[\'test\', \'test2\'] ')->get();

Это отправляется в БД как

where "table"."json_field"::jsonb $1| array['test', 'test2'] 

И хорошо, это не то, что я хотел запросить...

Попробовал с '\?', Поместил его в переплет ( Laravel doc ) - все равно безуспешно. Также я не нашел ссылку в документации ...

В моем Usecase я хочу, чтобы он сравнил объект json с psql, сравнивающим "? |"( Postgres Doc )

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Ну, не нашел ответа, но есть обходной путь:

Не используйте операторы вопросительного знака!

Вместоя пошел на названную функцию. Я нашел названную функцию через

SELECT 
  oprname, 
  oprcode || '(' || format_type(oprleft,  NULL::integer) || ', ' 
                 || format_type(oprright, NULL::integer) || ')' AS function
FROM pg_operator 
WHERE oprname = '?|';

(Нашел там: большое спасибо за этот пост! )

Так что мой Eloquent запрос теперь выглядит так:

ExampleModel::whereRaw('jsonb_exists_any("table"."json_field"::jsonb, array[\'test\', \'test2\'])')->get();

По крайней мере, его рабочий ¯ \ _ (ツ) _ / ¯

0 голосов
/ 17 октября 2019

Не тестировал, но попытался использовать PDO:

$whereRaw = DB::connection()->getPdo()->quote(' "table"."json_field"::jsonb ?| array["test", "test2"] ');

ExampleModel::whereRaw($whereRaw)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...