2016-07-28 16 views
0

laravelを使用して検索フォームを作成しようとしていますが、where句を使用できません。

Laravel - 句が動作しない場合

$term = $request->input('term'); 

$count = DB::table('members as m') 
     ->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%") 
     ->orWhere(DB::raw('m.member_last_name'), 'LIKE', "%$term%") 
     ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%") 
     ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_last_name')"), 'LIKE', "%$term%") 
     ->orWhere(DB::raw("concat('m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%") 
     ->orWhere(DB::raw("concat('m.member_name_affix',' ','m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%") 
     ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_name_affix',' ','m.member_last_name')"), 'LIKE', "%$term%") 
     ->count(); 

var_dump($count); 



のvar_dump($カウントが)常に関係なく、検索語が何であるか、すべてのデータベースエントリ、返します。


これは私の最初のLaravelプロジェクトであり、何か助けを借りて非常に感謝しています。

+1

var_dumpの後に 'dd(DB :: getQueryLog());'を実行して、生成されたクエリが何であるかを確認し、ここに投稿してください。 – Kamran

+0

生成されたクエリは実行前にどのように見えますか? – Walf

答えて

2

おそらくどこ全体的にクエリを包む試してください。

$count = DB::table('members as m') 
     ->where(function ($q) { 
      $q->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%") 
      ->orWhere(DB::raw('m.member_last_name'), 'LIKE', "%$term%") 
      ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%") 
      ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_last_name')"), 'LIKE', "%$term%") 
      ->orWhere(DB::raw("concat('m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%") 
      ->orWhere(DB::raw("concat('m.member_name_affix',' ','m.member_last_name',' ','m.member_first_name')"), 'LIKE', "%$term%") 
      ->orWhere(DB::raw("concat('m.member_first_name',' ','m.member_name_affix',' ','m.member_last_name')"), 'LIKE', "%$term%") 
     }) 
     ->count(); 
+0

ありがとうございました!それは今働きます!私はあなたの答えを7分で受け入れます! – Schwesi

+0

@kringeltorte wheyあなたはwhere(DB :: raw())の代わりに 'whereRaw()'を使用せず、クエリービルダーで直接 ''%$ term% "'を使って '' SQLインジェクション 'ここに。 – Avishek

+0

@Avishekこの関数の用語部分は、SQL注入を防ぐためにEloquentによって解析されます。私は100%ではありませんが、ここでwhereRawをどこの節で使用するかは、EloquentsのメソッドをサニタイズしてSQLインジェクションを開くことを回避します。 – Jono20201

0

あなたはもちろん失敗した、一緒に/またはを使用しています。次のことを試してみてください。

$count = DB::table('members as m') 
    ->where(DB::raw('m.member_first_name'), 'LIKE', "%$term%") 
    ->where(function ($query) { 
      $query->where(DB::raw('m.member_last_name'), 'LIKE', "%$term%") 
       ->orWhere(DB::raw('m.member_business_address'), 'LIKE', "%$term%")); 
     }) 
0

$term = "%".$request->input('term')."%"; 
$count = DB::table('members as m') 
     ->where('m.member_first_name', 'LIKE', $term) 
     ->orWhere('m.member_last_name', 'LIKE', $term) 
     ->orWhere('m.member_business_address', 'LIKE', $term) 
     ->orWhereRaw('(concat_ws(m.member_first_name,m.member_last_name) LIKE ?)',[$term]) 
     ->orWhereRaw('(concat_ws(m.member_last_name,m.member_first_name) LIKE ?)',[$term]) 
     ->orWhereRaw('(concat_ws(m.member_name_affix,m.member_last_name,m.member_first_name) LIKE ?)',[$term]) 
     ->orWhereRaw('(concat_ws(m.member_first_name,m.member_name_affix,m.member_last_name) LIKE ?)',[$term]) 
     ->count(); 

var_dump($count); 
...単純にこのコードを試してみて、あなたには、いくつかの構文エラーを得た場合、その後 'ここのシンボルと私はポストの前にそれをテストすることはできませんthere..asを変更しよう

whereRaw()を使用するとをwhere()に入れる必要はありません。

関連する問題