in my laravel controller i’m trying to perform the following query for the user search.
$data = User::orderBy('id','DESC') ->where('email','LIKE','%%'.$request->search."%%") ->orwhere('first_name','LIKE','%%'.$request->search."%%") ->orwhere('last_name','LIKE','%%'.$request->search."%%") ->WHERE('role_id','=','3') ->paginate(12); return view('admins.participants.results',compact('data')) ->with('i', ($request->input('page', 1) - 1) * 12 );
What I really want to perform is,
SELECT * FROM USERS WHERE role_id='3' AND email LIKE '%%search_string%%' OR first_name LIKE '%%search_string%%' OR last_name LIKE '%%search_string%%' ;
But the above laravel query outputs all the users without considering the `role_id=3
Advertisement
Answer
You can use where callback
$data = User::orderBy('id','DESC') ->where('role_id',3) ->where(function($query)use($request){ $query->where('email','LIKE','%%'.$request->search."%%"); $query->orwhere('first_name','LIKE','%%'.$request->search."%%"); $query->orwhere('last_name','LIKE','%%'.$request->search."%%"); })->paginate(12);
also you can change
'%%'.$request->search."%%"
to
"%%{$request->search}%%"