web-dev-qa-db-ja.com

Laravelクエリで複数のOR、AND条件を使用する方法

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を使用しています

12
M Arfan

クロージャを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

10
Alexey Mezenin

これを使って

$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
Anar Bayramov

あなたの場合は、クエリを書き換えることができます...

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();
1
Robert

これを試して。わたしにはできる。

$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();
0
Milad.biniyaz