Je dois faire une opération sql dans mon projet Laravel.
avec les conditions mentionnées, j'ai des conditions communes. Je sais comment l'écrire en mysql brut.
donc, par exemple Ce dont j'ai besoin est
Comment dire WHERE Condition X AND Condition Y AND ((a = 1 and b = 1) OR (c = 1 AND d = 1))
en utilisant le format de requête laravel? p >
3 Réponses :
Tenez compte de la syntaxe suivante:
DB::table('yourTable') ->where('x','=',1) ->where('y','=',1) ->where(function($queryBuilder){ $queryBuilder->where([ ['a','=',1], ['b','=',1], ]) ->orWhere([ ['c','=',1], ['d','=',1], ]); });
Si vous préférez une syntaxe plus lisible où
acceptera le tableau comme argument
DB::table('yourTable') ->where('x', '=', '1') ->where('y', '=', '1') ->where(function($q1) { $q1->where(function($q2) { $q2->where('a', '=', '1') ->where('b', '=', '1'); }) ->orWhere(function($q2) { $q2->where('c', '=', '1') ->where('d', '=', '1'); }); });
J'ai une condition E et une condition F sont toutes les deux communes à toutes les situations. Comment le mettre en œuvre aussi?
Veuillez modifier votre question et nous montrer le vrai problème.
$query = DB::table(...) ->where(function ($query) { $query->where('a', 1)->where('b', 1); })->orWhere(function ($query) { $query->where('c', 1)->where('d, 1); }); Laravel 6.x Docs - Query Builder - Where Clauses - Parameter Grouping
Vous devez les regrouper séparément en utilisant des fermetures. orWhere ()
pour la requête externe, et where ()
pour les requêtes internes.
$a = 1; $b = 1; $c = 1; $d = 1; Model::where(function($query) use ($a, $b) { $query->where("a", $a) ->where("b", $b); }) ->orWhere(function($query) use ($c, $d) { $query->where("c", $c) ->where("d", $d); });
Si vous n'avez pas de modèle, vous pouvez remplacer Model ::
par DB :: table ("myTable")
.
Vous pouvez utiliser toSql ()
pour voir la requête finale.
Vous pouvez utiliser cette documentation pour en savoir plus sur la création d'une requête dans Laravel. laravel.com/docs/6.x/queries#where-clauses
la méthode where peut accepter une fonction anonyme et la regroupe en conséquence