Laravel加入"和"和"或"在where子句中

时间:2017-08-25 09:30:02

标签: php laravel eloquent

如何编写像此SQL一样的Laravel 5 Eloquent查询?

where ( (table1.fname like %xxxxx% )
    OR (table1.lname like %xxxxx%) )
    AND table1.is_active != 0

我已经尝试了

->where('users.is_active', '!=', 2)
    ->where('users.name', 'like' , '%'. $search .'%')
    ->orWhere('users.lname', 'like' , '%'. $search .'%')
    ->orWhere('users.email', 'like' , '%'. $search .'%') ->get();

4 个答案:

答案 0 :(得分:2)

查看Laravel Documentation

中的高级加入条款
DB::table('users')
    ->join('contacts', function ($join) {
        $join->on('users.id', '=', 'contacts.user_id')
             ->where('contacts.user_id', '>', 5);
    })
    ->get();

加入

修改

我想我误解了这个问题。要做嵌套的事情,你可以做以下事情:

\DB::table('table1')->...->where(function($query) {
    $query->where('table1.fname', 'like', '%xxxxx$')->orWhere('table1.lname', 'like', '%xxxx%);
})->where('table1.is_active', '!=', 0);

答案 1 :(得分:0)

您可以使用模型

TableModel::where('fname', 'like', '%xxxxx%')
             ->orWhere('lname', 'like', '%xxxxx%')
             ->where('is_active', '!=', 0)
             ->get();

答案 2 :(得分:0)

$data =  DB::table('table1')->where('fname', 'like', '%xxxxx%')
         ->orWhere('lname', 'like', '%xxxxx%')
         ->where('is_active', '!=', 0)
         ->get();
//add use DB; in your controller

答案 3 :(得分:0)

要分组应该作为一个整体进行评估的子句,您可以传递where()一个闭包。然后,您需要第二次where来调查is_active列:

$value = '%xxxxx%';

$collection = Model::where(function ($models) use ($value) {
    $models->where('fname', 'like', $value)
           ->orWhere('lname', 'like', $value);
})
    ->where('is_active', '!=', 0)
    ->get();