我正在使用像这样的Laravel WhereBetween
$from = '2015-01-02';
$to = '2015-01-30';
$users = User::whereBetween('created_at', [$from,$to])->get();
如果在用户模型中找不到日期值,那么日期将不会显示正确吗?
我仍然想显示日期,即使是未找到的日期,然后我将值设置为0。
然后输出就像这样
[
{'2015-01-02': 201},
{'2015-01-03': 0},
{'2015-01-04': 0},
{'2015-01-05': 7},
...
{'2015-01-30': 0}
]
感谢。
答案 0 :(得分:0)
您首先需要执行以下查询,以便在给定范围内创建所有用户
$data = User::select([
DB::raw('DATE(created_at) AS date'),
DB::raw('COUNT(id) AS count'),
])
->whereBetween('created_at', [$from,$to])
->groupBy('date')
->orderBy('date', 'ASC')
->get();
通过上述查询,您将获得每天的用户数,如果当天没有用户创建,则不会提供 0 值。
现在,您需要做的是将上面的集合更改为数组,如果没有用户创建,则插入 0 值。
$userCount = $data->toArray();
$dataByDay = array();
foreach($userCount as $count){
$dataByDay[$count->date] = $count->count;
}
现在,将零值插入:
$dateFrom = Carbon::parse($from)->format('Y-m-d');
$dateTo = Carbon::parse($to)->format('Y-m-d');
$days = $dateTo->diffInDays($dateFrom);
for($i=0; $i<$days; $i++){
$dateString = $dateFrom->format('Y-m-d');
if(!isset($chartDataByDay[ $dateString ] {
$dataByDay[ $dateString ] = 0;
}
}
现在,$dataByDay
数组可以提供您想要的内容。
希望你明白。