laravel - “Where like”子句使用 2 列的串联值与 Eloquent

标签 laravel laravel-5 eloquent laravel-5.1

我有一个查询,要在多个列中搜索某个术语,其中一列必须是全名。

我已将姓名和姓氏分开,因此在搜索时必须连接这两个值。

我现在只搜索名字。我如何将连接添加到姓氏?我正在调查突变体,但我不知道这是否是正确的方法。

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/

相关文章:

mysql - 如何在 LEFT JOIN 上使用 LIMIT?

laravel - Vagrant Homestead root 密码是什么?

Laravel Eloquent where 或 where 与 ownToMany

php - 在 Laravel 中创建和返回具有关系的模型

php - Laravel 模型的自定义 "touches"功能

php - 如何在 Laravel 中验证数组?

mysql - Laravel 的 ORM 如何指定数据的排序值?

php - laravel `Auth:user()` 或 `Auth:id()` 的工作原理

php - Laravel 和 MySQL 的唯一 IP 计数器

php - 500 内部错误 : Failed to load resource Laravel 5. 0