【问题标题】:Eloquent group an array by carbon date week & countEloquent 按碳日期周数对数组进行分组
【发布时间】:2018-03-04 05:17:57
【问题描述】:

我有一个包含 91 个项目的数组,我希望按周的碳日期对数组项进行分组。

示例数据 -

 Collection {#240 ▼
  #items: array:91 [▼
    0 => array:2 [▶]
    1 => array:2 [▼
      "date" => Carbon {#278 ▼
        +"date": "2017-06-24 15:02:04.000000"
        +"timezone_type": 3
        +"timezone": "UTC"
      }
      "visitors" => 11
    ]

这是我目前的尝试 -

$dataViewQuarterly = $analytics->fetchSessions(Period::days(91))->take(91)->groupBy(function($date) {
        return Carbon::parse($date->date)->format('w');
});

它目前正在这条线上抛出一个Trying to get property of non-object -

return Carbon::parse($date->date)->format('w');

这是最好的方法吗?我应该用这些数据构建一个新数组吗?

【问题讨论】:

  • 哪一行给出了非对象错误?
  • Period::days(91) 它会给什么?是范围查询吗?
  • 那行不通。您基本上是在告诉 MySQL 按整数对结果进行分组。
  • 更新问题,周期 91 将 91 个结果返回到数组中,这只是对我想要的结果天数的调用。
  • 如果可能的话,你可以添加 laravel 的 whoops error page

标签: php arrays laravel eloquent php-carbon


【解决方案1】:

试试这个,我会帮忙,但是我需要查看你的$date 我不确定你有什么?

$dataViewQuarterly = $analytics->fetchSessions(Period::days(91))->take(91)->groupBy(function($date) {
        return Carbon::parse($date->created_at)->format('w');
});

【讨论】:

    【解决方案2】:

    我创造了一种非碳且非雄辩的做事方式,但它确实有效。由于数据每天都不同,因此滚动了 6 个月,因此我每 7 个项目对数组进行分块这一事实实际上并不会影响数据。

        $dataFetchQuarterly = $analytics->fetchSessions(Period::days(91))->take(91)->toArray();
        $weeks = array_chunk($dataFetchQuarterly, 7);
    
        $dataViewQuarterly = array();
    
        foreach($weeks as $index=>$sub_array) {
            $counter = 0;
    
            foreach($sub_array as $donut) {
                $counter += $donut['visitors'];
            }
    
            $dataViewQuarterly[$index] = $counter;
    
        }
    

    【讨论】:

      【解决方案3】:

      您可以使用startOfWeek Carbon 方法

      $dataViewQuarterly = $analytics->fetchSessions(Period::days(91))->take(91)->groupBy(function($date) {
       return Carbon::parse($date->date)->startOfWeek();
      });
      

      【讨论】:

      • 这仍然会引发Trying to get property of non-object 错误
      • 你的集合中有一些对象没有设置date 属性
      • 不,如果我将结果周期从 91 更改为 1,则始终设置日期,这样我只返回一个结果它仍然抛出相同的错误,然后我可以检查日期是否设置在一个结果。
      • 您可能需要在startOfWeek 之后致电toDateString
      猜你喜欢
      • 2015-06-26
      • 2020-07-23
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2023-01-10
      相关资源
      最近更新 更多