我试图在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();
答案 0 :(得分:1)
您为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();