Laravel когда предложение выбрасывает неопределенную переменную - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь сделать условное where внутри оператора select. Он выбрасывает неопределенную переменную class_id. Что здесь не так. Переменная class_id получила какое-то значение, но выбрасывает неопределенную переменную: class_id.

$class_id = isset($searchData[1]) ? $searchData[1] : '';

\Log::info($class_id);
    
$students = \User::where('role', 'student')
    ->where('fullName', 'like', '%'.$student_name.'%')
    ->orWhere('username', 'like', '%'.$student_name.'%')
    ->orWhere('email', 'like','%'.$student_name.'%')
    ->when($class_id != '',
        function ($q) {
            return $q->where('studentClass', '=', $class_id);
        })
    ->get();

1 Ответ

1 голос
/ 03 августа 2020

Вы используете неправильный синтаксис для when () . Вы используете его в идеальном сценарии, и вы можете не инициализировать указанную выше переменную.

Laravel 5.2 -> 5.5

$class_id = isset($searchData[1]) ? $searchData[1] : '';

$students = \User::where('role','student')
    ->where('fullName','like','%'.$student_name.'%')
    ->orWhere('username','like','%'.$student_name.'%')
    ->orWhere('email','like','%'.$student_name.'%')
    ->when($class_id, function ($query) use ($class_id) {
        return $query->where('studentClass','=', $class_id);
    })->get();

Laravel 5.6 +

$students = \User::where('role','student')
    ->where('fullName','like','%'.$student_name.'%')
    ->orWhere('username','like','%'.$student_name.'%')
    ->orWhere('email','like','%'.$student_name.'%')
    ->when($searchData[1], function ($query, $class_id) {
        return $query->where('studentClass','=', $class_id);
    })->get();

...