Reputation: 632
How to write laravel eloquent for the below SQL query ? username,first_name,last_name and email are column names.
select * from `message_users` where `username` like %somthing% and (`first_name` like %somthing% or `last_name` like %somthing%) and `email` like %something%
I've tried this
$queryObj= $this;
if(!empty($filter['username']))
$queryObj = $queryObj->where('username','like','%'.$filter['username'].'%');
if(!empty($filter['name'])){
$queryObj = $queryObj->where('first_name','like','%'.$filter['name'].'%');
$queryObj = $queryObj->orWhere('last_nam','like','%'.$filter['name'].'%');
}
if(!empty($filter['email']))
$queryObj = $queryObj->where('email','like','%'.$filter['email'].'%');
$result = $queryObj->orderBy('id','DESC')->paginate($limit);
return $result;
but this builds query without round brackets. Which don't give me a correct result!
select * from `message_users` where `username` like %somthing% and `first_name` like %somthing% or `last_name` like %somthing% and `email` like %something%
Upvotes: 0
Views: 271
Reputation: 547
You can use Advanced where clauses - parameter grouping . The query inside closure should be contained within the parenthesis group.
if(!empty($filter['name'])){
$queryObj->where(function ($query) use ($filter) {
$query->where('first_name','like','%'.$filter['name'].'%')
->orWhere('last_name','like','%'.$filter['name'].'%');
});
}
Upvotes: 1