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

beg*_*ner 1 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]);
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*rre 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);
Run Code Online (Sandbox Code Playgroud)