2016-09-02 6 views
0

Как написать laravel красноречиво для ниже SQL-запроса? Имя пользователя, имя_пользователя, имя последнего и адрес электронной почты - это имена столбцов.Laravel Eloquent query builder путается с оператором 'или' в sql

select * from `message_users` where `username` like %somthing% and (`first_name` like %somthing% or `last_name` like %somthing%) and `email` like %something% 

Я попытался это

$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; 

, но это создает запрос без круглых скобок. Который не дает мне правильный результат!

select * from `message_users` where `username` like %somthing% and `first_name` like %somthing% or `last_name` like %somthing% and `email` like %something% 
+0

Не нужна скобка, это пары что-либо сторона 'or' – zanderwar

+0

Материалов В подобном огорожен одинарных кавычках, как«% что-то%» – Susang

ответ

1

Вы можете использовать Advanced where clauses - parameter grouping. Запрос внутри закрытия должен содержаться в группе скобок.

if(!empty($filter['name'])){ 
     $queryObj->where(function ($query) use ($filter) { 
      $query->where('first_name','like','%'.$filter['name'].'%') 
        ->orWhere('last_name','like','%'.$filter['name'].'%'); 
     }); 
    } 
+0

Благодаря follio он работал. –

Смежные вопросы