我该如何获得所有日期,甚至没有雄辩的日期,也没有分组依据?

时间:2019-03-04 06:48:37

标签: laravel eloquent

我有一个获取月参数的方法,可以从用户表中选择该月的行。我想显示一个月的注册用户数。

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     |

....

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);
}

有了这个,我想您现在可以处理数组中的结果了。