laravel5.2 get entries per week using whereBetween & car


laravel5.2 get entries per week using whereBetween & carbon

我使用whereBetween()每周获取结果。我把它们放进一个数组中,在我的视图中循环这个数组,并在第p周显示记录。

出于某种原因,whereBetween()查询似乎有点bug。

我的控制器代码:

$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.00000)。知道哪里出了问题吗?

addDays不会返回Carbon对象的新实例,它会修改被调用的对象并返回相同的对象。当你做

[$dtStart, $dtStart->addDays(7)]

数组的两个元素都指向同一个对象,这就是为什么您在查询中看到相同的值。

将上面的阵列替换为:

[$dtStart, $dtStart->copy()->addDays(7)]

以便传递两个不同的对象,并对原始对象的副本调用addDays