有没有办法将 2 个 foreach 和一个 for 循环一起循环?
Is there any way to loop 2 foreach and one for loop together?
我正在进行 Laravel 8 项目,我将在其中创建人力资源管理系统,所以我现在很难报告员工出勤率。
我有2个模型
User.php
和 Attendance.php
还有 2 个控制器和模型之间的关系。
public function attendances()
{
return $this->hasMany(Attendance::class, 'user_id');
}
这是来自我的 AttendanceController.php
public function index()
{
return view('frontend.attendances.index', [
'employees' => $this->userRepository->getAllUsers()
->with(['attendances' => function($query) {
$query->where('company_id', Auth::user()->company_id);
}])
->get()
]);
}
所以现在我必须显示 table 当前月份的所有日期,并显示每个用户是否在工作。
我有这是我的 summary.blade.php
@foreach($employees as $employee)
<tr>
<td>
<img class="img-fluid rounded-circle mr-2" width="30" height="30" src="{{ $employee->image ? $employee->image : asset('assets/images/user.jpg') }}" alt="{{ $employee->firstname }}" data-original-title="{{ $employee->firstname }}">
{{ $employee->name() }}
</td>
@php($count=0)
@for($i=1; Carbon\Carbon::now()->daysInMonth >= $i; $i++)
@foreach($employee->attendances as $attendance)
@if($i == Carbon\Carbon::createFromFormat('Y-m-d H:m:s', $attendance->check_in)->isoFormat('D'))
<td class="text-center"><i class="fa fa-check text-success"></i></td>
@php($count++)
@else
<td class="text-center"><i class="fa fa-times text-danger"></i></td>
@endif
@endforeach
@endfor
<td class="text-success text-center">{{ $count }} / {{ Carbon\Carbon::now()->daysInMonth }}</td>
</tr>
@endforeach
这不是它应该的工作方式,但我已经尝试了很多方法,但仍然找不到合适的方法。
这是我想要实现的图片,以及我的代码所拥有的
这样的事情怎么样:遍历日期并根据日期过滤员工的出勤率。
//First, create a date period.
//use Carbon\Carbon; use Carbon\CarbonPeriod;
$daysOfThisMonth = CarbonPeriod::create(Carbon::now()->startOfMonth(), Carbon::now()->endOfMonth());
//Loop through the days
foreach($daysOfThisMonth as $day){
//firstWhere will return one row if day exists in check_in field (equivalent to true), otherwise will return nothing, which will be equivalent to a false.
if( $employee->attendance->firstWhere('check_in', $day ) ) //formatthe dates according to your preference
echo "attended - print tick";
else
echo "not attended - print x";
}
我正在进行 Laravel 8 项目,我将在其中创建人力资源管理系统,所以我现在很难报告员工出勤率。
我有2个模型
User.php
和 Attendance.php
还有 2 个控制器和模型之间的关系。
public function attendances()
{
return $this->hasMany(Attendance::class, 'user_id');
}
这是来自我的 AttendanceController.php
public function index()
{
return view('frontend.attendances.index', [
'employees' => $this->userRepository->getAllUsers()
->with(['attendances' => function($query) {
$query->where('company_id', Auth::user()->company_id);
}])
->get()
]);
}
所以现在我必须显示 table 当前月份的所有日期,并显示每个用户是否在工作。
我有这是我的 summary.blade.php
@foreach($employees as $employee)
<tr>
<td>
<img class="img-fluid rounded-circle mr-2" width="30" height="30" src="{{ $employee->image ? $employee->image : asset('assets/images/user.jpg') }}" alt="{{ $employee->firstname }}" data-original-title="{{ $employee->firstname }}">
{{ $employee->name() }}
</td>
@php($count=0)
@for($i=1; Carbon\Carbon::now()->daysInMonth >= $i; $i++)
@foreach($employee->attendances as $attendance)
@if($i == Carbon\Carbon::createFromFormat('Y-m-d H:m:s', $attendance->check_in)->isoFormat('D'))
<td class="text-center"><i class="fa fa-check text-success"></i></td>
@php($count++)
@else
<td class="text-center"><i class="fa fa-times text-danger"></i></td>
@endif
@endforeach
@endfor
<td class="text-success text-center">{{ $count }} / {{ Carbon\Carbon::now()->daysInMonth }}</td>
</tr>
@endforeach
这不是它应该的工作方式,但我已经尝试了很多方法,但仍然找不到合适的方法。
这是我想要实现的图片,以及我的代码所拥有的
这样的事情怎么样:遍历日期并根据日期过滤员工的出勤率。
//First, create a date period.
//use Carbon\Carbon; use Carbon\CarbonPeriod;
$daysOfThisMonth = CarbonPeriod::create(Carbon::now()->startOfMonth(), Carbon::now()->endOfMonth());
//Loop through the days
foreach($daysOfThisMonth as $day){
//firstWhere will return one row if day exists in check_in field (equivalent to true), otherwise will return nothing, which will be equivalent to a false.
if( $employee->attendance->firstWhere('check_in', $day ) ) //formatthe dates according to your preference
echo "attended - print tick";
else
echo "not attended - print x";
}