PHP Search - WHERE

Am o functie care cauta in baza de date niste proiecte doar daca userul are acces la ele, ideea este ca mi le afiseaza pe toate chiar daca n-am acces la ele. Trebuie doar alea unde am acces.
Functia functioneaza daca scot (orWhere), cum fac sa tina neaparat cont de prima regula? (Primul whereHas in cazul meu).

return Legal::whereHas('users', function($q){
                $q->where('user_id', \Auth::id());
            })
                ->where('name','LIKE','%'.$search.'%')
                ->orWhere('name_en','LIKE','%'.$search.'%')
                ->orWhereHas('proje', function($q) use ($search){
                    $q->where('name','LIKE','%'.$search.'%')
                        ->orWhere('name_en','LIKE','%'.$search.'%');
                })
                ->with($with);

Ca sa functioneze, trebuie neaparat sa tina cont de prima regula, adica (aceasta conditie cedeaza la “orWhere”) si nu mai tine cont de ea, drept urmare imi afiseaza si lucrurile unde nu am acces la ele:

whereHas('users', function($q){
                $q->where('user_id', \Auth::id());
            })
return Legal::whereHas('users', function($q){
                $q->where('user_id', \Auth::id());
            })
->where(function ($query) use ($search) {
$query->where('name','LIKE','%'.$search.'%')
                ->orWhere('name_en','LIKE','%'.$search.'%')
                ->orWhereHas('proje', function($q) use ($search){
                    $q->where('name','LIKE','%'.$search.'%')
                        ->orWhere('name_en','LIKE','%'.$search.'%');
                })
})
                
                ->with($with);

Ceva de genul, nu imi dau seama daca am scris bine din editorul asta dar poti citi mai multe aici https://laravel.com/docs/7.x/queries#parameter-grouping
De fapt, ai si folosit asta deja.

Practic tu avand orWhere acolo daca intra pe ramura aia nu mai tine cont de restul conditiilor. Trebuie grupat tot ce e dupa whereHas.

Daca te uitai la ce iti genereaza ai fi vazut ca aveai WHERE relatie AND name LIKE OR name_en LIKE etc. Asa ai WHERE relatie AND (name LIKE OR name_en LIKE)

2 Likes