Laravel 拉威尔·霍特劳夫-如何逃离一个“?”
有没有办法逃过一场灾难?在一个雄辩的陈述中?使用Laravel6.x 例如: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'] 这不是我想问的 尝试使用“\?”,将其放入绑定-仍然没有成功。 我也没
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