Laravel 拉威尔·霍特劳夫-如何逃离一个“?”

Laravel 拉威尔·霍特劳夫-如何逃离一个“?”,laravel,postgresql,eloquent,escaping,Laravel,Postgresql,Eloquent,Escaping,有没有办法逃过一场灾难?在一个雄辩的陈述中?使用Laravel6.x 例如: ExampleModel::whereRaw(' "table"."json_field"::jsonb ?| array[\'test\', \'test2\'] ')->get(); 这将作为一个参数发送到数据库 where "table"."json_field"::jsonb $1| array['test', 'test2'] 这不是我想问的 尝试使用“\?”,将其放入绑定-仍然没有成功。 我也没

有没有办法逃过一场灾难?在一个雄辩的陈述中?使用Laravel6.x

例如:

ExampleModel::whereRaw(' "table"."json_field"::jsonb ?| array[\'test\', \'test2\'] ')->get();
这将作为一个参数发送到数据库

where "table"."json_field"::jsonb $1| array['test', 'test2'] 
这不是我想问的

尝试使用“\?”,将其放入绑定-仍然没有成功。 我也没有在文档中找到参考资料

在我的用例中,我希望它将json对象与psql比较?|


提前谢谢

未测试,但尝试使用PDO:

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

ExampleModel::whereRaw($whereRaw)->get();

嗯,没有找到答案,但有一个解决办法:

不要使用问号运算符

相反,我选择了命名函数。我通过找到了命名函数

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

因此,我雄辩的问题现在看起来像:

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

至少它能起作用’\_ツ_/“

这个问题很老了,但我的回答可能会有所帮助

解决办法很简单:用另一个问号来逃避问号

示例的代码如下所示:

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

此解决方案已使用Laravel 7.28.3进行了测试。

遗憾的是,whereRaw现在插入了太多的引号:select*from table where“table.json_field::jsonb?| array[test,test2]”已经尝试过,但这不是我们要找的引号;-失败的引号位于where子句之后:[……]where*'*table.json[…]@edit星号将突出显示失败的qoute