如何在 Laravel 查询中使用多个 OR、AND 条件

Posted

技术标签:

【中文标题】如何在 Laravel 查询中使用多个 OR、AND 条件【英文标题】:How to use multiple OR,AND condition in Laravel queries 【发布时间】:2017-09-09 07:42:58 【问题描述】:

我需要帮助在 laravel 中查询

我的自定义查询:(返回正确结果)

Select * FROM events WHERE status = 0 AND (type="public" or type = "private")

如何在 Laravel 中编写此查询。

Event::where('status' , 0)->where("type" , "private")->orWhere('type' , "public")->get();

但它也会返回所有状态不为 0 的公共事件。

我正在使用 Laravel 5.4

【问题讨论】:

【参考方案1】:

将闭包传递给where()

Event::where('status' , 0)
     ->where(function($q) 
         $q->where('type', 'private')
           ->orWhere('type', 'public');
     )
     ->get();

https://laravel.com/docs/5.4/queries#parameter-grouping

【讨论】:

【参考方案2】:

在你的情况下,你可以重写查询......

select * FROM `events` WHERE `status` = 0 AND `type` IN ("public", "private");

还有 Eloquent:

$events = Event::where('status', 0)
    ->whereIn('type', ['public', 'private'])
    ->get();

如果您想要分组 OR/AND,请使用闭包:

$events = Event::where('status', 0)
    ->where(function($query) 
        $query->where('type', 'public')
            ->orWhere('type', 'private');
    )->get();

【讨论】:

【参考方案3】:

使用这个

$event = Event::where('status' , 0);

$event = $event->where("type" , "private")->orWhere('type' , "public")->get();

或者这个

Event::where('status' , 0)
     ->where(function($result) 
         $result->where("type" , "private")
           ->orWhere('type' , "public");
     )
     ->get();

【讨论】:

【参考方案4】:

试试这个。它对我有用。

$rand_word=Session::get('rand_word');
$questions =DB::table('questions')
    ->where('word_id',$rand_word)
    ->where('lesson_id',$lesson_id)
    ->whereIn('type', ['sel_voice', 'listening'])
    ->get();

【讨论】:

以上是关于如何在 Laravel 查询中使用多个 OR、AND 条件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel eloquent 中查询多个关系

如何使用 Laravel 查询构建器跨表选择多个列?

如何在 laravel eloquent 中组合这些多个查询

Laravel:如何优化多个查询

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

如何使用 Laravel Eloquent 创建多个 Where 子句查询?