在这里,我很难从date_range中找到工作日数据(Monday - Friday),然后删除其中一个工作日。
$dateRange = $request->date_range; //25-12-2023 - 31-12-2023
$query = Presence::orderBy('start_time', 'DESC')
$dateSegments = explode(' - ', $dateRange);
if (count($dateSegments) == 2) {
$query->whereDate('date', '>=', Carbon::createFromFormat('d-m-Y', $dateSegments[0]));
$query->whereDate('date', '<=', Carbon::createFromFormat('d-m-Y', $dateSegments[1]));
}
$query->join('users', 'presences.user_id', 'users.id')
->groupBy('user_id')
->select(
'presences.user_id',
'users.name as user_name',
);
$perUser = $query->get();
输出此查询:
[
[
'id' => 1,
'user_id' => 10
'date' => '2023-12-25' //Monday
],
[
'id' => 2,
'name' => 10
'date' => '2023-12-26' //Tuesday
],
[
'id' => 3,
'name' => 10
'date' => '2023-12-27' //Wednesday
],
[
'id' => 4,
'name' => 10
'date' => '2023-12-28' //Thursday
],
[
'id' => 5,
'name' => 10
'date' => '2023-12-31' //Sunday
],
];
我有假日表的输出;
[
[
'id' => 1,
'name' => 'Christmas',
'date' => '2023-12-25' //Monday
],
[
'id' => 1,
'name' => 'Independent Day',
'date' => '2023-12-27' //Wednesday
],
];
Map
$list = $perUser-〉map(函数($item){ //这是不包括星期六+星期日+假日的计数日$item-〉active_day =假日::whereDate('日期','〉=',复写::创建自格式('d-m-Y',$日期段[0]))-〉whereDate('日期','〈=',复写::创建自格式('d-m-Y',$日期段[1]))-〉count();返回$项目;}); return $list
输出我想要的:
[
{
"user_id": 10,
"user_name": "Brian",
"active_day": 2 //this is count day without Saturday + Sunday + holiday
}
]
2条答案
按热度按时间myzjeezk1#
我可能会建议用SQL来做这一切:
通过添加以下where条件,直接从查询中排除星期六和星期日:
然后,您可以通过添加以下where条件和子查询来排除假日:
所有这些都是用Laravel query builder完成的:
最后一件事,你可以使用这个语句:
但我不能百分之百肯定它会像你期望的那样有效
omjgkv6w2#
获取要从列表中删除的日期,
Map列表并过滤需要删除的日期
结果将是,