2016-05-10 23 views
0

私はlikeクエリを複数の関連テーブルに対して実行する方法を考え出すのに苦労しています。Laravel Eloquent検索複数の関連テーブル

私はsubmissionsテーブルを持っています。これは、関連するusersmcd_forms、およびsubmission_statusesテーブルを持っています。

ここに文を指定して$terms_likeで実行するコードです。

 $submission = new Submission; 

     $terms_like = '%'.$search_terms.'%'; 

     $data['submissions'] = $submission 
      ->join('users as users', 'users.id', '=', 'submissions.user_id') 
      ->join('mcd_forms as forms', 'forms.submission_id', '=', 'submissions.id') 
      ->join('submission_statuses as statuses', 'statuses.id', '=', 'submissions.submission_status_id') 
      ->where(function($q) use ($terms_like) { 
       $q->where('users.user_group_id', '=', Auth::user()->user_group_id) 
       ->orWhere('forms.name', 'like', $terms_like) 
       ->orWhere('forms.custom_id', 'like', $terms_like) 
       ->orWhere('forms.start_date', 'like', $terms_like) 
       ->orWhere('forms.end_date', 'like', $terms_like) 
       ->orWhere('forms.soft_sell_date', 'like', $terms_like) 
       ->orWhere('forms.region', 'like', $terms_like) 
       ->orWhere('statuses.status_formatted', 'like', $terms_like); 
      }); 

私は試しても間違った結果を返します。私は間違って何をしていますか?

答えて

0

上記のクエリでは、 "%"記号を使用していないため、like節は単語全体と一致しようとしているので "="として機能します。

はすべて「どこで」句のように置き換えます。これは、どこにでもテキスト内の単語と一致するようにしようとします

->orWhere('forms.name', 'like', "%".$terms_like."%") 

+0

すみませんが、私は上記の私のコードでは、私は私の例では、それが含まれていなかったことでことをやっています。 – AJStacy

0

あなたはこの次演算子「のような」試すことができます。

$users = DB::table('users') 
      ->where('forms.name','LIKE', '%'.$terms_like.'%') 
      ->get(); 
+0

申し訳ありませんが、私は私のコードの中で私が私の例にそれを含めなかったことでこれをやっています。 – AJStacy

+0

結合クエリが正常に機能する場合は、結合クエリについて確認してから、一時的に日付フィールドをコミットしてクエリを実行してください – tanvirjahan

関連する問題