Nested 'AND OR' Query in Eloquent Nested 'AND OR' Query in Eloquent laravel laravel

Nested 'AND OR' Query in Eloquent


You were very close to the answer

$challenge = $this->challenges()        ->where('open', true)        ->where(function($q) use ($user_id, $opponent_id) {            $q->where(function($query) use ($opponent_id, $user_id){                    $query->where('player_1', $user_id)                          ->where('player_2', $opponent_id);                })              ->orWhere(function($query) use ($opponent_id, $user_id) {                    $query->where('player_1', $opponent_id)                          ->where('player_2', $user_id);                });            })        ->first();

Here are the differences between two codes


I needed the nested wheres to search for a user by multiple fields:

    $users_query->where('company_uuid', '=', $company_uuid);    $users_query->where('is_active', '=', true);    $users_query->whereNested(function($query) use ($search){        /** @var Builder $query */        $query            ->where('first_name', 'like', '%' . $search . '%')            ->orWhere('last_name', 'like', '%' . $search . '%')            ->orWhere('email', 'like', '%' . $search . '%');    });

Supposing you want to stack where layers without losing them on using orWhereWouldn't this be the same thing ?

   $challenge = $this->challenges()       ->where('open', true)       ->whereNested(function($q) use ($user_id, $opponent_id) {           $query->where('player_1', $user_id)               ->where('player_2', $opponent_id);           $query->orWhere('player_1', $opponent_id)               ->where('player_2', $user_id);   })->first();