我有一个查询,要在多个列中搜索某个术语,其中一列必须是全名。
我已将姓名和姓氏分开,因此在搜索时必须连接这两个值。
我现在只搜索名字。我如何将连接添加到姓氏?我正在调查突变体,但我不知道这是否是正确的方法。
public function search($searchQuery)
{
$search = "%{$searchQuery}%";
return Order::with('customer')
->orWhereHas('customer', function($query) use ($search){
$query->where('dni', 'like', $search);
})
->orWhereHas('customer', function($query) use ($search){
$query->where('name', 'like', $search);
})
->orWhere('code', 'like', $search)
->paginate(15);
}
最佳答案
更改器(mutator)不是这里的方法,因为它们不会影响您正在构建的查询,它们仅用于存储在模型中的值。但是您可以使用以下条件:
$query->where(DB::raw('CONCAT_WS(" ", name, lastname)'), 'like', $search);
MySQL函数CONCAT_WS
将连接两个字符串,将它们与作为第一个参数传递的字符串粘合在一起。因此,在本例中,如果名字是 John
,姓氏是 Smith
,则条件将被评估为此 “John Smith”,如“%query%” “
。 DB:raw
用于避免条件的第一部分被转义,这会在串联语句周围放置反引号。
关于laravel - “Where like”子句使用 2 列的串联值与 Eloquent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33896662/