我使用whereBetween()来获取每周的结果。我将它们放入一个数组中以在我的视图中循环该数组并显示记录p。周。
出于某种原因,whereBetween()查询似乎有点错误。
我的控制器代码:
$dtStart = Carbon::create(2016, 07, 05, 0);
$weeks_passed = $dtStart->diffinWeeks(Carbon::now());
$payouts = [];
DB::enableQueryLog();
for ($i = 0; $i <= $weeks_passed; $i++) {
if ($i == 0) {
$payouts = Transaction::where('payed_out', 1)->where('user_id', Auth::user()->id)->whereBetween('updated_at', [$dtStart, $dtStart->addDays(7)])->get();
dd(DB::getQueryLog());
}
else
{
$payouts = Transaction::where('payed_out', 1)->whereIn('user_id', [Auth::user()->id])->whereBetween('updated_at', [$dtStart->addDays($i * 7), $dtStart->addDays(($i + 1) * 7)])->get();
}
调试第一个查询显示例如记录的最后两个绑定(两个whereBetween参数)都是相同的(2016-07-12 00:00:00.000000)。知道出了什么问题吗?
答案 0 :(得分:0)
addDays 不会返回 Carbon 对象的新实例,它会修改调用它的对象并返回相同的对象。当你这样做
[$dtStart, $dtStart->addDays(7)]
数组的两个元素都指向同一个对象,这就是您在查询中看到相同值的原因。
将上面的数组替换为:
[$dtStart, $dtStart->copy()->addDays(7)]
以便传递两个不同的对象,并在原始对象的副本上调用 addDays 。