Laravel when子句抛出未定义的变量

时间:2020-08-02 18:43:20

标签: laravel select

我试图在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 个答案:

答案 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();