Laravel concat 查询(where 条件)
Posted
技术标签:
【中文标题】Laravel concat 查询(where 条件)【英文标题】:Laravel concat in query (where condition) 【发布时间】:2014-10-04 08:13:45 【问题描述】:我是 laravel 的新手(从今天开始),在构建简单查询时遇到了问题:
$query->orWhere("CONCAT(`nvp`, ' ', `vpv`)", 'LIKE', "%$this->searchNeedle%");
上面的这一行是封装查询条件中的几个条件之一。我认为这种情况下不需要其他行,但请告诉我您是否需要查看它们。
我发现开发者决定添加一个
`
在第一个 orWhere/where 参数之前和之后导致我不能使用简单的 concat 的问题,因为上面的行将导致:
`CONCAT(`vpv`, ' ', `nvp`)` LIKE ?)'
↑ ↑
this & this
由于这是自动添加的,我无法在不覆盖我不会的 laravel-core 函数的情况下删除它。是否有任何基于 SQL 的“hack”可以处理这两个 ` ?像 1 = 1 这样的东西,你知道吗?
也许你有另一种解决方案让我得到预期的结果,将一个字符串与两行组合进行比较?
【问题讨论】:
【参考方案1】:使用 orWhereRaw
执行原始 where 查询:
$query->orWhereRaw("CONCAT(`nvp`, ' ', `vpv`) LIKE ?", ['%'.$this->searchNeedle.'%']);
【讨论】:
它对我不起作用(SQL 错误)。我通过将%
放入第二个参数来修复它:$query->orWhereRaw("CONCAT(nvp, ' ', vpv) LIKE ?", ["%".$this->searchNeedle."%"]);
能否请您在此处查看与 Laravel 表连接相关的问题:***.com/questions/52149031/…?【参考方案2】:
Laravel 在幕后做了一些事情,比如为你添加刻度线。
幸运的是,它还提供了一些工具来为您完成工作......
对于这种类型的事情,DB::raw()
通常工作得很好。试试这样的...
$query->orWhere(DB::raw("CONCAT(`nvp`, ' ', `vpv`)"), 'LIKE', "%".$this->searchNeedle."%");
【讨论】:
现在应用程序不会崩溃,但会导致:CONCAT(nvp
, ' ', vpv
) LIKE '%users name%' is null
我觉得我的语法有点不对劲,我只是修改了答案。
看那个。奇迹般有效。谢谢!!
我用这个答案闻到了 sql 注入,` $this->searchNeedle` 直接来自用户。
Laravel 会为你处理参数绑定,所以不会有 SQL 注入的机会。如果整个内容都包含在 DB::raw()
中,那么您是正确的。以上是关于Laravel concat 查询(where 条件)的主要内容,如果未能解决你的问题,请参考以下文章