我是laravel的新手,面临构建简单查询的问题:
$query->orWhere("CONCAT(`nvp`, ' ', `vpv`)", 'LIKE', "%$this->searchNeedle%");
上面这行是封装查询条件中的几个条件之一。
我认为其他行对于这种情况是不必要的,但如果您需要看的话请告诉我。我发现开发者决定添加一个
在第一个orWhere/where参数之前和之后,导致我不能使用简单的concat的问题,因为上面的行将导致:
`CONCAT(`vpv`, ' ', `nvp`)` LIKE ?)'
↑ ↑
this & this
因为这是自动添加的,所以我不能在不覆盖larvel -core函数的情况下删除它。有没有基于sql的"黑客"?它能处理这两个?像1 = 1这样的式子?
也许你有另一个解决方案,让我得到预期的结果,比较一个字符串与两行组合?
Laravel在后台做了一些事情,比如为你添加标记。
幸运的是,它还提供了一些工具来为您完成这项工作…
对于这种类型的事情,DB::raw()
通常工作得很好。试试这样做…
$query->orWhere(DB::raw("CONCAT(`nvp`, ' ', `vpv`)"), 'LIKE', "%".$this->searchNeedle."%");
使用orWhereRaw
执行raw where查询:
$query->orWhereRaw("CONCAT(`nvp`, ' ', `vpv`) LIKE ?", ['%'.$this->searchNeedle.'%']);