where() 日期之间? " />
问题陈述
查询 $q-> ;where('recur_at', '>', date("Y-m-d H:i:s", time() - 604800)) 不满足所需条件,即获取 recur_at 值大于当前日期的项目减去 7 天。
解决方案 1
要准确查找将在未来 7 天内重复发生的项目,请使用以下查询:
<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>
解决方案 2(使用 Carbon 优化)
使用 Carbon 包增强查询以进行日期操作:
<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>
优化解决方案
正如 Joel Friedman 所建议的,以下查询更加简洁高效:
<code class="php">$projects = Project::whereBetween('recur_at', array(Carbon::now(), Carbon::now()->addWeek())) ->where('status', '<', 5) ->where('recur_cancelled', '=', 0);</code>
该解决方案利用 whereBetween 方法指定 recur_at 字段的范围,有效地检索具有 recur_at 值的项目在接下来的 7 天内。
以上是如何使用 Laravel 的 $q->where() 高效查询未来 7 天内重复的项目?的详细内容。更多信息请关注PHP中文网其他相关文章!