'where like'子句使用2列的连接值和eloquent

cod*_*iaf 4 laravel eloquent laravel-5 laravel-5.1

我有一个查询,在几列中搜索一个术语,其中一个必须是一个全名.

我已经在名称和姓氏中分隔了全名,所以我必须在搜索时连接这两个值.

我现在只有搜索名字.我如何将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);
}
Run Code Online (Sandbox Code Playgroud)

Bog*_*dan 11

Mutators不是这里的方法,因为它们不会影响您正在构建的查询,它们仅用于存储在模型中的值.但是,您可以使用以下条件:

$query->where(DB::raw('CONCAT_WS(" ", name, lastname)'), 'like', $search);
Run Code Online (Sandbox Code Playgroud)

MySQL函数CONCAT_WS将连接两个字符串,将它们与作为第一个参数传递的字符串粘合在一起.因此,在这种情况下,如果名字是John和姓氏是Smith,则将对此条件进行评估"John Smith" like "%query%".将DB:raw用于避免进行转义条件这将使围绕置语句反引号的第一部分.