Попробуйте сделать это так:
@foreach($payments as $key => $value)
<tr>
<th>{{ $key }}</th>
@foreach($months as $month)
<td>
<i class="{{ in_array($month, $value->pluck('month')->all()) ? 'fa fa-check text-success' : 'fa fa-times text-danger' }} "></i>
</td>
@endforeach
</tr>
@endforeach
В Contoroller вы получите такие данные:
[
'ID1' => [
['student_id' => 'ID1', 'month' => 'JAN' ...],
['student_id' => 'ID1', 'month' => 'FEB' ...],
],
'ID2' => [
['student_id' => 'ID2', 'month' => 'APR' ...],
],
]
Вот почему я сделал значение ключа l oop, чтобы получить student_id в качестве ключа и платежи этого студента в качестве значений, мы собираем месяцы, чтобы получить массив месяцев, которые данный студент заплатил
['JAN', 'FEB'] // for the student with ID1
Затем метод теста in_array
, если текущий месяц в У оплаченных учеником месяцев длится oop месяцев, если да, показать успехи, в противном случае показать опасность.