'喜欢'使用2列的连接值和eloquent的子句

时间:2015-11-24 14:48:11

标签: laravel laravel-5 eloquent 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);
}

2 个答案:

答案 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 . '%');