【问题标题】:laravel5.2 get entries per week using whereBetween & carbonlaravel5.2 使用 whereBetween & carbon 每周获取条目
【发布时间】:2016-07-24 17:00:28
【问题描述】:

我每周使用 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)。知道哪里出了问题吗?

【问题讨论】:

  • 我在这里做了一个疯狂的猜测,但我认为你应该为每个日期创建一个新实例。

标签: php laravel laravel-5 eloquent laravel-5.2


【解决方案1】:

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

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

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

将上面的数组替换为:

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

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

【讨论】:

    猜你喜欢
    • 2018-02-03
    • 2020-12-11
    • 2016-04-20
    • 1970-01-01
    • 2013-05-19
    • 2016-07-20
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多