Laravel concat查询(where条件)

Jon*_*han 14 sql laravel

我对laravel(今天开始)很新,并且面临构建简单查询的问题:

$query->orWhere("CONCAT(`nvp`, ' ', `vpv`)", 'LIKE', "%$this->searchNeedle%");
Run Code Online (Sandbox Code Playgroud)

上面的这一行是封装查询条件中的几个条件之一.我认为其他方面对于这种情况不是必需的,但请告诉我你是否需要看到它们.

我发现开发人员决定添加一个

`

在第一个orWhere/where param之前和之后引起问题我不能使用简单的concat,因为上面的行将导致:

`CONCAT(`vpv`, ' ', `nvp`)` LIKE ?)' 
?                         ?
this                    & this
Run Code Online (Sandbox Code Playgroud)

由于这是自动添加我不能删除它而不覆盖laravel核心功能,我不会.是否有任何基于SQL的"黑客"处理这两个`?像1 = 1那样的东西,你知道吗?

也许你有另一个解决方案让我得到预期的结果,将一个字符串与两行组合比较?

use*_*496 33

Laravel在幕后做了一些事情,比如为你添加刻度线.

幸运的是,它还提供了一些工具来为您完成工作......

对于这种类型的东西,DB::raw()通常效果很好.尝试这样的事......

$query->orWhere(DB::raw("CONCAT(`nvp`, ' ', `vpv`)"), 'LIKE', "%".$this->searchNeedle."%");
Run Code Online (Sandbox Code Playgroud)

  • Laravel 会为你处理参数绑定,所以没有 SQL 注入的机会。如果整个内容都包含在 `DB::raw()` 中,那你就对了。 (3认同)

Jos*_*ber 13

使用orWhereRaw执行原料,其中查询:

$query->orWhereRaw("CONCAT(`nvp`, ' ', `vpv`) LIKE ?", ['%'.$this->searchNeedle.'%']);
Run Code Online (Sandbox Code Playgroud)

  • 它对我不起作用(SQL 错误)。我通过将 `%` 放入第二个参数来修复它: `$query->orWhereRaw("CONCAT(nvp, ' ', vpv) LIKE ?", ["%".$this->searchNeedle."%"] );` (2认同)