php - 如何使用 laravel eloquent 按日期和用户信息获取用户分组?
问题描述
我正在尝试从表中获取以下数据
- 每个日期的注册用户数
- 用户详情
我正在尝试按照脚本来获得它
$users = User::select(DB::raw('count(id) as agents, left(DATE(created_at),10) as registeredDate'))
->whereHas('roles', function($q){
$q->where('name', '=', 'agent');
})
->offset($start)
->limit($limit)
->orderBy($order,'DESC')
->groupBy('registeredDate')
->get();
上面的查询返回每个日期的注册用户数
if($users){
foreach($users as $r){
$nestedData['agents'] = $r->agents;
$nestedData['date'] = date('d M Y',strtotime($r->registeredDate));
$data[] = $nestedData;
}
}
但我也想在同一个查询中获取用户详细信息。我想要的输出是
'data' => [
[
"agents" => "13",
"date" => "12 Jan 2019",
"nested_data" => [
[
'full_name' => 'john',
'status' => 'active',
'email' => 'john@gmail.com',
],
[
'full_name' => 'John',
'status' => 'active',
'email' => 'john2@gmail.com',
]
]
]
]
有人可以指导我如何实现它。我很感激。谢谢
解决方案
将您的查询更改为:
$users = User::select(DB::raw('count(id) as agents, left(DATE(created_at),10) as registeredDate'))
->whereHas('roles', function($q){
$q->where('name', '=', 'agent');
})
->offset($start)
->limit($limit)
->orderBy($order,'DESC')
->get();
将您的 foreach 循环更改为:
if($users){
foreach($users as $user){
$date = date('d M Y',strtotime($r->registeredDate));
$data[$date]['date'] = $date;
$data[$date]['nestedData'][] = ['first_name' => $user->first_name, 'status' => $user->status, 'email' => $user->email];
$data[$date]['agents'] = count($data[$date]['nestedData']);
}
}
推荐阅读
- c# - ASP.NET Core 相关字段为必填错误
- python - 需要帮助使用 python 创建圣诞树
- android - 为什么我的应用程序可以在模拟器上运行,但不能在发布模式下运行?
- c++ - 需要帮助来更正我的单向选择代码
- java - 无法让我的 API 数据显示在其他页面上
- python - 如何计算实例的索引?
- oauth-2.0 - 撤销 id 令牌 Google oauth2 java
- objective-c - 在命令行中打开的 MacCatalyst 应用程序中发送 HTTP 请求
- xml - XSLT - 仅首字母大写,但如何处理像 McDermott 这样的名字
- python - scipy 不使用 anaconda 的本地库作为 libgcc