为什么iterator_to_array方法会报Array to string conversion这个错误呢?
参考了这个帖子:博客:查询最近几天每日的登陆数量,没有数量的补零
将没有数据的月份补零。
代码如下:
//迭代器
$months_period = \Carbon\Carbon::parse(date('y-m-d',strtotime("-12 month")))->monthsUntil(date('y-m-d'));
//从数据库查询出来的数据,按照月份分组
$receiptNum = CrmReceipt::whereHas('CrmContract.CrmCustomer', function ($query) {
$query->where('admin_user_id', Admin::user()->id);
})->selectRaw('DATE_FORMAT(updated_at,"%Y-%m") as date,SUM(receive) as value')->whereBetween('updated_at', [
$months_period->first()->toDateString(),
$months_period->last()->addMonths()->toDateString(),
])->groupBy('date')->pluck('value', 'date')->toArray();
// 建立连续的月份区间数组
$this->receiptNum = iterator_to_array(
$months_period->map( function ($month) use ($receiptNum) {
$month_str = date('Y-m',strtotime($month));
return [
'date' => $month_str,
'value' => $receiptNum[$month_str] ?? 0,
];
})
);
//这里打印是可以输出正常数组的
dd($this->receiptNum);
但是如果注释掉打印,运行。就出现这个错误
Array to string conversion
经查,是这段出现的问题
$this->receiptNum = iterator_to_array(
$months_period->map( function ($month) use ($receiptNum) {
$month_str = date('Y-m',strtotime($month));
return [
'date' => $month_str,
'value' => $receiptNum[$month_str] ?? 0,
];
})
);
如果直接这样就不报错
$this->receiptNum = iterator_to_array(
$months_period
);
请问是为什么呢?找了很久,一直没找到什么问题。。。
乌鸦嘴社区 wyz.xyz 来玩。
@LiamHao 参考的是这个博文 博客:查询最近几天每日的登陆数量,没有数量的补零