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

时间:2017-04-13 09:05:51

标签: php mysql laravel laravel-5.4

我需要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

4 个答案:

答案 0 :(得分:9)

将关闭传递到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

答案 1 :(得分:1)

使用此

$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();

答案 2 :(得分:1)

在您的情况下,您只需重写查询...

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 :(得分:0)

试试这个。它对我有用。

$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();