Как я могу решить неопределенный индекс в Laravel? - PullRequest
1 голос
/ 14 апреля 2020

Я хочу показать платежи следующим образом:

enter image description here

И моя структура таблицы платежей:

enter image description here

Я пробовал это:

 $months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];
 $collection = App\Payment::all();
 $payments = $collection->groupBy('student_id');
 return view('payment', compact('payments', 'months'));

И мой блейд-код:

@foreach($payments as $payment)
<tr>
    <th>{{ $payment['student_id'] }}</th>
    @foreach($months as $month)
    <td>
        <i class="{{ $month == $payment['month'] ? 'fa fa-check text-success' : 'fa fa-times text-danger' }} "></i>
    </td>
    @endforeach
</tr>
@endforeach

Я получил неопределенную ошибку индекса. Но когда я добавляю $ payment [0] ['student_id'] и $ payment [0] ['month'] это. Я не получаю никакой ошибки. Но я не понимаю, чего хочу.

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Попробуйте сделать это так:

@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 месяцев, если да, показать успехи, в противном случае показать опасность.

0 голосов
/ 14 апреля 2020

Сделайте это в вашем контроллере

$months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];
 $payments = App\Payment::orderBy('student_id','ASC')->get();
 return view('payment', compact('payments', 'months'));

Попробуйте это в вашем блейд-файле

@foreach($payments as $payment)
<tr>
    <th>{{ $payment->student_id }}</th>
    @foreach($months as $month)
    <td>
        <i class="{{ $month == $payment->month ? 'fa fa-check text-success' 
          : 'fa fa-times text-danger' }} "></i>
    </td>
    @endforeach
</tr>
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...