laravel如何雄辩地使查询具有多个“和”?

时间:2018-12-11 13:33:50

标签: php laravel eloquent

我有这个查询:

SELECT * 
FROM `groups` 
WHERE `status` = 1 
    AND `active` != 1 
    AND (`approved` != 1 OR `approved` IS NULL)

我在查询生成器中尝试了此操作,但不知道如何正确设置

这是我的查询生成器:

Group::where([['status', '=', 1], ['active', '!=', 1]])
    ->where([['approved', '!=', 1]])
    ->orWhereNull()
    ->get();

4 个答案:

答案 0 :(得分:3)

您应该使用带有Closure的where对参数进行分组。 https://laravel.com/docs/5.7/queries#parameter-grouping

$data = Group::where(function($query){
        $query
            ->where('approved', '!=', 1)
            ->orWhereNull('approved');
    })
    ->where('status', 1)
    ->where('active', '!=', 1)
    ->get();

答案 1 :(得分:0)

您可以尝试以下操作:

$articles = \App\Article::where('foo', 'bar')
    ->where('color', 'blue')
    ->orWhere('name', 'like', '%John%')
    ->whereIn('id', [1, 2, 3, 4, 5])
    ->get();

答案 2 :(得分:0)

尝试这个

 Group::where('status', 1)
    ->where('active', '!=', 1)
    ->where(function($query){
       $query->where('approved', '!=', 1)
            ->orWhereNull('approved')
    })->get();

在laravel see中使用where闭包

答案 3 :(得分:0)

尝试

Group::where('status', 1)->where('active', '!=', 1)->where('approved', '!=', 1)
->orWhere('status', 1)->where('active', '!=', 1)->where('approved', NULL)
->get();

$x = Group::where(function($q){
        $q->where('approved', '!=', 1)
          ->orWhereNull('approved')
        })
           ->where('status', 1)->where('active', '!=', 1)
           ->get();