Maison > Article > base de données > Comment interroger efficacement les projets récurrents au cours des 7 prochains jours avec $q->where() de Laravel entre les dates ?
où() entre les dates ? " />
Énoncé du problème
La requête $q-> ;where('recur_at', '>', date("Y-m-d H:i:s", time() - 604800)) ne répond pas aux critères souhaités, à savoir obtenir des projets avec des valeurs recur_at supérieures à la date actuelle moins 7 jours.
Solution 1
Pour trouver avec précision les projets qui doivent se reproduire dans les 7 prochains jours, utilisez la requête suivante :
<code class="php">$projects = Project::where(function($q) { $q->where(DB::raw('recur_at BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()')); $q->where('status', '<', 5); $q->where('recur_cancelled', '=', 0); });</code>
Solution 2 (optimisée avec Carbon)
Améliorez la requête à l'aide du package Carbon pour la manipulation de date :
<code class="php">$projects = Project::where('recur_at', '<=', Carbon::now()->addWeek()) ->where('recur_at', '!=', "0000-00-00 00:00:00") ->where('status', '<', 5) ->where('recur_cancelled', '=', 0);</code>
Solution optimisée
Comme Joel Friedman l'a suggéré, la requête suivante est plus concise et efficace :
<code class="php">$projects = Project::whereBetween('recur_at', array(Carbon::now(), Carbon::now()->addWeek())) ->where('status', '<', 5) ->where('recur_cancelled', '=', 0);</code>
Cette solution utilise la méthode WhereBetween pour spécifier une plage pour le champ recur_at, récupérant ainsi efficacement les projets avec des valeurs recur_at dans les 7 prochains jours.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!