我有一个查询在多个列中搜索一个术语,其中一个必须是全名。
我已经在名称和姓氏中分隔了全名,所以我必须在搜索时连接这两个值。
我现在只有搜索姓名。我如何将concat添加到姓氏?我正在调查突变者,但我不知道这是否可行。
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);
}
答案 0 :(得分:10)
Mutators不是这里的方法,因为它们不会影响您正在构建的查询,它们仅用于存储在模型中的值。但是,您可以使用以下条件:
$query->where(DB::raw('CONCAT_WS(" ", name, lastname)'), 'like', $search);
MySQL函数CONCAT_WS
将连接两个字符串,将它们与作为第一个参数传递的字符串粘合在一起。因此,在这种情况下,如果名字是John
且姓氏是Smith
,则条件将评估为此"John Smith" like "%query%"
。 DB:raw
用于避免条件的第一部分被转义,这会在连接语句周围添加反引号。
答案 1 :(得分:0)
我尝试了@bogdan的解决方案,但必须在%
前面指定$search
$query->where(DB::raw('CONCAT_WS(" ", name, lastname)'), 'like', '%' . $search . '%');