2016-09-02 45 views
0

以下のSQLクエリーのためにlaravel eloquentを書くには? username、first_name、last_nameおよびemailは列名です。Laravel EloquentクエリービルダーがSQLの 'or'演算子と混同されました

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; 

を試してみたが、これは丸括弧なしでクエリを作成します。それは私に正しい結果を与えていない!

+0

それペアの何 – 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「%は%何か」のような単一引用符で囲むように 'or' –

関連する問題