Мой вопрос очень похож на этот вопрос о переполнении стека , и почти мой код скопирован из него. Но проблема в том, что он не может отображать буквы «P» и «H», если сотрудники присутствуют или если дата выходная. (Я пытаюсь получить ответ по ссылке выше)
Контроллер
$report = Report::findOrFail($id);
$staffs = Staff::where('building_id', $report->building_id)->get();
$month = date('m', strtotime($report->data));
$attendances = [];
foreach ($staffs as $staff) {
$holidays = Holiday::whereMonth('date', $month)->get();
$month_in_no = date('m', strtotime($report->data));
$s = Staff::where('id', $staff->id)->with(['attendance' => function($attend) use ($month_in_no) {
$attend->whereMonth('date', $month_in_no)->where('direction', 'In');
}])->get();
array_push($attendances, $s);
}
И мой файл Blade
<tbody>
@foreach ($attendances as $attendance)
@foreach ($attendance as $staff)
<tr>
<td>{{ $staff->name }}</td>
@php $totalPresentCount = 0 @endphp
@for ($i = 1; $i < $daysInMonth; $i++)
@php
$date_create = date('Y-m')."-".$i;
$pre_abs = '-';
@endphp
@foreach ($staff->attendance as $att)
@foreach ($holidays as $holiday)
@php
$date_to_check = date('Y-m-d', strtotime($att->date));
@endphp
@if ($date_create == $date_to_check) {{-- cannot check here for my notice! but don't know why --}}
@php
$pre_abs = 'P';
$totalPresentCount++;
@endphp
@elseif ($date_to_check == $holiday->date || date('D', mktime(0, 0, 0, $month, $i, $report->year)) == 'Sat' || date('D', mktime(0, 0, 0, $month, $i, $report->year)) == 'Sun')
@php
$pre_abs = 'H';
@endphp
@endif
@endforeach
@endforeach
<td>{{ $pre_abs }}</td>
@endfor
{{-- below is for checking total p/a/h --}}
<td>{{ $totalPresentCount }}</td>
<td>{{ $daysInMonth - count($holidays) - $totalPresentCount }}</td>
<td>{{ count($holidays) }}</td>
</tr>
@endforeach
@endforeach
</tbody>
Он может отображать результат, как показано ниже
как показать букву «P», если персонал присутствует в этот конкретный день, и «H», если дата находится в Holiday::model()
Заранее спасибо