Posted on: August 05, 2020 11:55 PM
Posted by: Renato
Views: 1325
# Laravel 5 Eloquent onde e ou em Cláusulas
- laravel-5-eloquent-where-and-or-in-clauses
Eu tento obter resultados da tabela com várias cláusulas where e / ou.
Minha instrução SQL é:
```
SELECT * FROM tbl
WHERE m__Id = 46
AND
t_Id = 2
AND
(Cab = 2 OR Cab = 4)
```
Como posso obter isso com o Laravel Eloquent?
Meu código no Laravel é:
```php
$BType = CabRes::where('m_Id', '=', '46')
->where('t_Id', '=', '2')
->where('Cab', '2')
->orWhere('Cab', '=', '4')
->get();
```
## Usando avançados onde:
```
CabRes::where('m__Id', 46)
->where('t_Id', 2)
->where(function($q) {
$q->where('Cab', 2)
->orWhere('Cab', 4);
})
->get();
```
Ou, melhor ainda, usando whereIn():
```
CabRes::where('m__Id', 46)
->where('t_Id', 2)
->whereIn('Cab', $cabIds)
->get();
```
## Além disso, se você tiver uma variável
```
CabRes::where('m_Id', 46)
->where('t_Id', 2)
->where(function($q) use ($variable){
$q->where('Cab', 2)
->orWhere('Cab', $variable);
})
->get();
```
> Quando usamos várias andcondições (where) com last (where + ou where), a condição where falha na maioria das vezes. para isso, podemos usar a função where aninhada com parâmetros que passam nela.
```
$feedsql = DB::table('feeds as t1')
->leftjoin('groups as t2', 't1.groups_id', '=', 't2.id')
->where('t2.status', 1)
->whereRaw("t1.published_on <= NOW()")
>whereIn('t1.groupid', $group_ids)
->where(function($q)use ($userid) {
$q->where('t2.contact_users_id', $userid)
->orWhere('t1.users_id', $userid);
})
->orderBy('t1.published_on', 'desc')->get();
A consulta acima valida toda a condição where e, finalmente, verifica onde t2.status = 1 e (onde t2.contact_users_id = '$ userid' ou onde t1.users_id = '$ userid')
```
Donate to Site
Renato
Developer