Как написать красноречивый запрос Laravel, где (условие) и (условие 2 или условие 3)

#php #sql #laravel #eloquent

Вопрос:

Допустим, у нас есть такой SQL

 select * from cards
where (deck_id=${deck_id})
and (added_by =${user_id} or is_available = 1)
 

И хочу написать в Laravel красноречивое

Я попытался использовать следующие запросы, но результат не такой, как предполагалось.

 Card::where(['deck_id'=>$deck_id,'added_by'=>$user_id])
    ->orWhere(['deck_id'=>$deck_id,'is_available'=>1])
    ->get();
 

 Card::where(['deck_id'=>$deck_id])
        ->Where(['added_by'=>$user_id])
        ->orWhere('is_available',1)
        ->get();
 

Ответ №1:

Похоже, ты хочешь чего-то подобного :

 Card::where('deck_id', $deck_id)
   ->where(function ($query) use($user_id){
         $query->where('added_by', $user_id)
         ->orWhere('is_available', 1);
    })
   ->get();