1
votes

Requête éloquente Laravel utilisant WHERE un ensemble de conditions ou OU un autre ensemble de conditions avec quelques conditions courantes?

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?


2 commentaires

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


3 Réponses :


1
votes

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 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');
        });
    });


2 commentaires

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.



0
votes
$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

0 commentaires

1
votes

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.


0 commentaires