I want to add a condition first before adding another where query it but seems that laravel won't allow. I want something like the following.
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]);
}
                You should use the when() function : 
$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);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With