我想开发一个食堂管理应用程序,其中用户(成员)每月都会有进出记录。
这是我在控制器中尝试使用的Eloquent查询语句,处理的会话日期(session('dates'))可能是“Nov-2023”,“Dec-2023”,“Jan-2024”等格式:
$sessionDate = Carbon::createFromFormat('M-Y', session('dates'));
$currentDate = now();
$sessionDateNumeric = intval($sessionDate->format('Ym'));
$currentDateNumeric = intval($currentDate->format('Ym'));
if ($sessionDateNumeric == $currentDateNumeric) {
$users = User::where('batch', $this->batch)->where('status', 'active')->get();
} elseif ($sessionDateNumeric < $currentDateNumeric) {
$users = User::where('batch', $this->batch)
->where(function ($query) use ($sessionDate) {
$query->where('status', 'active')
->where(function ($query) use ($sessionDate) {
$query->whereDate('created_at', '<=', $sessionDate->endOfMonth())
->orWhereDate('updated_at', '<=', $sessionDate->endOfMonth());
});
$query->orWhere('status', 'inactive')
->where(function ($query) use ($sessionDate) {
$query->whereDate('created_at', '<=', $sessionDate->endOfMonth())
->orWhereDate('updated_at', '<=', $sessionDate->endOfMonth());
});
})
->get();
} else {
$users = [];
}
以下是MySQL数据库中的用户表数据:
| Name | status | created_at | updated_at |
|------|--------|----------------------|----------------------|
| M | active | 2023-12-09 16:33:08 | 2023-12-09 16:33:08 |
| N | active | 2023-10-11 16:52:49 | 2023-12-14 17:51:28 |
| L | inactive | 2023-11-15 18:02:36 | 2023-11-22 18:02:36 |
| K | active | 2023-11-08 04:20:23 | 2023-12-14 17:37:41 |
| S | active | 2023-12-14 05:27:27 | 2024-01-04 05:38:38 |
根据表格数据,对于2023年10月,有1名用户创建,所以该月份的$user=1人;2023年11月,有2名用户创建,加上上个月仍然活跃的1名用户,所以总共有$users=3人;2023年12月,有2名用户创建,3名用户来自上个月且仍处于活跃状态,另外有1名用户在这个月变为非活跃状态,但我仍需要他的数据,所以总共有$users=4人;而对于当前月份(2024年1月),只需要显示所有活跃用户即可。
我的期望结果是:对于2023年10月,$users输出为1人(N);对于2023年11月,$users输出为3人(N,L,K);对于2023年12月,$users输出为4人(M,N,K,S);对于2024年1月,$users输出也为4人(M,N,K,S)。
我希望我已经清晰地阐述了我的问题。