Comment dire WHERE (a = 1 OU b =1 ) ET (c = 1 OU d = 1)
?
Pour les requêtes plus complexes, dois-je utiliser du SQL brut ?
Utilisez le [regroupement de paramètres][1] ([Laravel 4.2][2]). Pour votre exemple, ce serait quelque chose comme ceci :
Model::where(function ($query) {
$query->where('a', '=', 1)
->orWhere('b', '=', 1);
})->where(function ($query) {
$query->where('c', '=', 1)
->orWhere('d', '=', 1);
});
[1] : https://laravel.com/docs/master/queries#parameter-grouping [2] : https://laravel.com/docs/4.2/queries#advanced-wheres
Si vous voulez utiliser les paramètres pour a,b,c,d dans Laravel 4
Model::where(function ($query) use ($a,$b) {
$query->where('a', '=', $a)
->orWhere('b', '=', $b);
})
->where(function ($query) use ($c,$d) {
$query->where('c', '=', $c)
->orWhere('d', '=', $d);
});
Si vous bouclez les conditions OR, vous n'avez pas besoin du deuxième $query->where des autres messages (en fait, je ne pense pas que vous en ayez besoin en général, vous pouvez simplement utiliser orWhere dans les where if imbriqués).
$attributes = ['first'=>'a','second'=>'b'];
$query->where(function ($query) use ($attributes)
{
foreach ($attributes as $key=>value)
{
//you can use orWhere the first time, doesn't need to be ->where
$query->orWhere($key,$value);
}
});