我在这里看到过类似的帖子,但是它们是针对老版本的Laravel的,而且我的查询字符串是动态创建的。
我得到一个数组的数组,这些数组表示我在构造sql查询字符串时需要使用的值。例如:
[
["a" => "a1", "b" => "b1", "c" => "c1"],
["a" => "a2", "b" => "b2", "c" => "c2", "d" => "d2"]
]
然后,我需要创建一些复杂的查询,这是不可能写与Laravel的查询生成器,并使用上述动态数据:
SELECT
...
WHERE (a="a1", b="b1", c="c1")
OR WHERE (a="a2", b="b2", c="c2", d="d2")
...
从我在这里看到的旧帖子中,有人提到我可以使用
$result = DB::select($query_string):
或者甚至用DB::statement
。
但是,我不确定这在Laravel 8及以上是否仍然是一个好方法,因为它不在文档中。
但即使是这样,这也意味着我将按原样放置字符串,而不考虑绑定值以防止sql注入。
那么在这种情况下我该怎么做呢?
1条答案
按热度按时间7rtdyuoh1#
我会使用Closure和foreach,因为您可以使用带有字符串键的数组来定义where/orWhere条件。
如果您真的需要使用原始SQL,只需添加
orderByRaw()
、groupByRaw
等原始函数... https://laravel.com/api/9.x/Illuminate/Database/Query/Builder.html关于sql注入,您需要验证数据。https://laravel.com/docs/9.x/validation