2 votes

Comment créer un filtrage en utilisant une déclaration SQL en PHP Laravel ?

J'ai une table nommée Package. Actuellement, je veux filtrer la table. Disons que l'utilisateur insère des valeurs dans la variable, par exemple, de = 2/3/2020 et à = 10/3/2020. Ensuite, il sera calculé dans mon codage et obtenir la durée des jours, résultant noOfdays = 8 jours. Donc, à partir de la durée, il sera déterminé, quels paquets il appartient dans la durée de 8 jours.

calcul des jours :

        $today = Carbon::now();

        $dt1 = Carbon::createFromFormat('d/m/Y',$departure);
        $dt2 = Carbon::createFromFormat('d/m/Y',$arrival);

        $noOfDays = $dt1->diffInDays($dt2);

Le calcul n'a pas d'erreur, qui lorsque dd($noOfDays), il en résultera = 8 jours.

Déclaration SQL :

            $packages = Package::where([
                ['id', '=', $plan],
                ['from', '<=', $noOfDays, 'AND', 'to', '>=', $noOfDays],
            ])
            ->get();

Tableau des paquets : Package Table

Le problème, c'est que lorsque je filtre, je reçois le paquet 1 et le paquet 2. Il n'est censé obtenir que le paquet 2. Je pense qu'il y a un problème dans l'instruction SQL. Quelqu'un a-t-il déjà été confronté à cette situation ? Car logiquement, je pense que la partie SQL est déjà vraie. Mais pourquoi il filtre et récupère le paquet 1 ?

1voto

Qonvex620 Points 3404

Tu dois séparer tes deux clauses pour obtenir ce que tu veux comme ça.

 $packages = Package::where([
     ['id', '=', $plan], 
     ['from', '<=', $noOfDays], 
     ['to', '>=', $noOfDays]
            ])
 ->get();

Pour être plus lisible, il est bon que votre code ressemble à ceci

 $packages = Package::where('id', $plan)
            ->where('from', '<=', $noOfDays)
            ->where('to', '>=', $noOfDays)
            ->get();

0voto

pr1nc3 Points 4937

Modifiez votre deuxième énoncé " où ". La clause where utilise toujours un ADN, sauf si vous utilisez orWhere ou l'imbriquer dans une fonction.

['id', '=', $plan], 
['from', '<=', $noOfDays], 
['to', '>=', $noOfDays]

Le 4ème paramètre, que vous passez comme un AND n'est pas utilisé comme vous l'attendez.

Lesquels résultats à package1 pour être inclus dans votre sortie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X