ZavulonP
@ZavulonP

Неопределенная переменная в "представлении" Laravel. Почему так и как исправить?

Контроллер:
public function GetStudents($i) {
        try {
            $dbconnect = DB::connection()->getPDO();
            $dbname = DB::connection()->getDatabaseName();
        } catch(Exception $e) {
            return redirect('/exception');
        }

        if (isset($i)) {
            $students = Students::all()->where('class','=',$i);
        } else {
            $students = Students::all();
        }

        return view('students', compact('students'));

    }

Route (маршут):
Route::get('/students/{i}', 'App\Http\Controllers\StudentsController@GetStudents')->name('GetStudents');

Преставление (View):
@foreach($students as $student)
                    <tr>
                        <td>
                            @php
                                echo $i++;
                            @endphp
                        </td>
                        <td>{{$student->student_name}}</td>
                        <td>{{$student->class}}</td>
                    </tr>
                @endforeach


Что я делаю не так?
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
iMedved2009
@iMedved2009
Не люблю людей
1. Не совсем понятно откуда у вас появляется во view переменная $i. Ее либо надо туда передавать, либо там инициализировать.
2. При этом делать этого не надо, у blade есть The Loop Variable и стоит использовать {{$loop->index}}
3. Этот код странен. Вы выбираете все из базы и начинаете фильтровать циклом. Зачем вам БД?
$students = Students::all()->where('class','=',$i);

Как бы
$students = Students::where('class','=',$i)->get();

4. Но и это не совсем правильно. Совсем правильно будет вместо
if (isset($i)) {
            $students = Students::all()->where('class','=',$i);
        } else {
            $students = Students::all();
        }

сделать:
$students = Students::when($i, function($builder, $i){ return $builder->where('class', '=', $i); } )->get();


Вот только параметр $i у вас обязательный - что в роуте что в методе. Каким образом у вас может возникнуть ситуация когда $i в методе необьявлена? По идее никогда - у вас вылетит эксепшн

5. Смысл этого кода какой?
try {
            $dbconnect = DB::connection()->getPDO();
            $dbname = DB::connection()->getDatabaseName();
        } catch(Exception $e) {
            return redirect('/exception');
        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽