下面是我正在努力实现的图像:-
x1c 0d1x的数据
我在Laravel上,我想根据有多少新用户进入网站以及有多少用户从网站删除帐户,从用户表中获取当前日期数据的过去30天。我已使用软删除管理已删除的用户。我必须在chat.js中显示这些数据。我已经做了下面的代码,但没有为我的chat.js获得正确的数据
$startDate = now()->subDays(30)->startOfDay();
$endDate = now()->endOfDay();
$days = [];
$currentDate = clone $startDate;
$allUsers = User::count();
while ($currentDate->lte($endDate)) {
$days[$currentDate->format('M d')] = $allUsers;
$currentDate->addDay();
}
$records = User::withTrashed()
->whereBetween('created_at', [$startDate, $endDate])
->select('created_at', 'deleted_at')
->get();
foreach ($records as $record) {
$date = Carbon::parse($record->created_at)->format('M d');
if($allUsers != 0){
$days[$date] += $record->deleted_at ? -1 : 1;
}
}
$labels = array_keys($days);
$data = array_values($days);
return [
'datasets' => [
[
'label' => 'New user',
'data' => $data,
],
],
'labels' => $labels,
];
字符串
我已经设法获取数据,但生成的数据不正确。我想在chat.js中显示过去30天的数据。例如,如果今天是2019年7月14日,我想获取2019年6月14日到2019年7月14日之间的数据。并且如果在23年6月14日之前,在用户表中有5个活动用户,并且在最近30天之间有一些新用户进入,则计数必须从6开始。
这是在我的用户表screenshort上
这是输出output screenshot
3条答案
按热度按时间ubof19bj1#
我建议创建一个表或视图来计算一天结束时的用户数量。这样,您就不必在每次加载图表时都运行相同的查询和计算。
1.创建一个命令
php artisan make:command GenerateUserCounts
,该命令应该为$date
的输入生成用户计数,默认情况下为today()
1.计划命令在一天结束前运行
字符串
1.手动运行前几天的命令
cl25kdpy2#
字符串
g6ll5ycj3#
从你的代码中,似乎你试图在下面的行中实现一些东西:
1.预先填充一个天数数组,其中包含周期开始时的用户计数(这里有一个bug);
1.循环访问天数,添加已创建用户的计数并删除已删除用户的计数。
我看到的错误是你在期末而不是期初开始计数。您不应该使用
$allUsers
预填充所有日期,而应该仅使用$usersAtBeginning = User::where('created_at', '<' $startDate)
预填充开始的用户。尽管如此,正如我所提到的,通过更好地利用Laravel特性,您的代码可以更直接(更快)。在本例中,是Collection的方法。你的函数可能看起来像这样:
字符串