Laravel雄辩地按条件在查询中添加``where''子句

时间:2019-07-17 08:56:40

标签: laravel

我想先添加一个条件,然后再添加另一个where查询,但是laravel不允许。我不需要以下内容。

function index()
{
    $role = Auth::user()->role; //SEE_ALL, SEE_DEPT_A, SEE_DEPT_B

    $q = Input::get('q');
    if ($q != "") {
        $user = User::where('name', 'LIKE', '%' . $q . '%')
            ->orWhere('email', 'LIKE', '%' . $q . '%')
            ->orderBy('name');

        if ($role == "SEE_DEPT_A") {
            $user->where('user_department', "A");
        }

        $user->paginate(10)->appends('q', $q);
    }

    return view('users.index')->with('data', ['users' => $user, 'q' => $q]);
}

3 个答案:

答案 0 :(得分:5)

您应该使用when()函数:

$user = User::where('name', 'LIKE', '%' . $q . '%')
            ->orWhere('email', 'LIKE', '%' . $q . '%')
            ->orderBy('name')

        ->when($role == "SEE_DEPT_A", function($query){
             return $query->where('user_department', "A");
        })->paginate(10)->appends('q', $q);

答案 1 :(得分:2)

您需要在使用where子句的地方分配语句:

 if ($role == "SEE_DEPT_A") {
        $user = $user->where('user_department', "A");
 }

如果if语句没有运行(在false的情况下),它将引发关于$user不确定的错误

答案 2 :(得分:-1)

您可以插入多个条件,例如:

Expecting newline or semicolon