我有一个获取月参数的方法,可以从用户表中选择该月的行。我想显示一个月的注册用户数。
public function registeredUsersDaily($month)
{
$countOfDailyRegisteredUsersForAMonth = User::user()
->where(DB::raw('created_at'), '=', $month)
->groupBy('date')
->orderBy('date')
->get([
DB::raw('DATE(created_at) as date'),
DB::raw('COUNT(*) as count')
]);
dd($countOfDailyRegisteredUsersForAMonth);
}
它只返回用户表中存在的日期的计数,所以我想为不存在的日期返回零。
|date|count|
| 5 | 10 |
| 15 | 3 |
我想要这样的结果:
|date |count |
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 0 |
| 5 | 10 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 0 |
| 10 | 0 |
| 11 | 0 |
| 12 | 0 |
| 13 | 0 |
| 14 | 0 |
| 15 | 3 |
....
答案 0 :(得分:0)
如果要使用默认日期,则可以在该migration
文件中提及,或者也可以在model
中进行设置,当用户未指定日期时,可以从此处检索数据。
您也可以参考此内容
How to pass default values to controller by routing in Laravel 5?
答案 1 :(得分:0)
请这样检查
$dateValues = array_column($countOfDailyRegisteredUsersForAMonth, "date");
$maxDate = max($dateValues);
$likeYouWant=[];
for ($i = 1; $i <= $maxDate; $i++)
{
$likeYouWant[] = ["date" => $i, "count" => in_array($i, $dateValues) ? $countOfDailyRegisteredUsersForAMonth[array_search($i, $dateValues)]["count"] : 0];
}
print_r($likeYouWant);
答案 2 :(得分:0)
从评论中我得到的是: 我认为最好的办法是计算每月每个月创建的用户数。如果在给定日期没有人注册,这将使您得到零。 这样,您可能会遍历日期,检查每个日期注册的用户总数。
例如,让我们尝试让用户从现在开始创建最近30天:
$results = [];
$startOfDay = now()->createMidnightDate();
for($i=0; $i<=30; $i++)
{
$total_count = User::whereBetween('created_at', [$startOfDay->subDays($i-1), $startOfDay->subDays($i)])
->count();
array_push($results[ $startOfDay->subDays($i)->format('d')], $total_count);
}
有了这个,我想您现在可以处理数组中的结果了。