【问题标题】:'Where like' clause using the concatenated value of 2 columns with eloquent'Where like' 子句使用 2 列的连接值与 eloquent
【发布时间】:2015-11-24 14:48:10
【问题描述】:

我有一个查询,它在几列中搜索一个词,其中一个必须是全名。

我在name和lastname中已经将全名分开了,所以我在搜索时必须将这2个值连接起来。

我现在只有搜索名称。我如何将 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);
}

【问题讨论】:

    标签: laravel laravel-5 eloquent laravel-5.1


    【解决方案1】:

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

    $query->where(DB::raw('CONCAT_WS(" ", name, lastname)'), 'like', $search);
    

    MySQL 函数CONCAT_WS 将连接两个字符串,将它们与作为第一个参数传递的字符串粘合在一起。所以在这种情况下,如果名字是John,姓是Smith,则条件将被评估为"John Smith" like "%query%"DB:raw 用于避免条件的第一部分被转义,这会在连接语句周围放置反引号。

    【讨论】:

    • 这个怎么样.....但是你需要的两列在你使用“with”引入的关系上:)。
    【解决方案2】:

    我尝试了@bogdan 的解决方案,但必须在$search 前面指定%

    $query->where(DB::raw('CONCAT_WS(" ", name, lastname)'), 'like', '%' . $search . '%');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-20
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多