Laravel で WEB アプリの開発をする際によくある機能として、チェックボックスや複数セレクトボックスによる検索機能があります。
よくある機能なんですが、コントローラに書くロジックがちょっと複雑なんですよね。
今回は「チェックボックスや複数セレクトボックスによる検索機能について」エントリーします。
やりたいこと
都道府県をチェックボックスや複数セレクトボックスを複数選択して、検索できる機能をつくります。
今回は複数セレクトボックスを使います。
※チェックボックスでも複数セレクトボックスでも、PHPでの受け取りは配列になるので同じです。
まずはHTMLを使った複数セレクトボックスは以下のようになります。
html
<div class="form-group col-md-2 pt-2">都道府県</div>
<div class="form-group col-md-4">
<select name="prefs[]" class="custom-select" id="rank" multiple>
<option value="北海道">北海道</option>
<option value="青森県">青森県</option>
<option value="岩手県">岩手県</option>
:
</select>
</div>
続いて送信ボタンを押したあとのコントローラの処理を書いていきます。
処理の内容としては $request->input('prefs') で配列として受け取り、それをSQLの条件にいれていく内容になります。
Controller
:
if(is_array($request->input('prefs'))){
$query->where(function($q) use($request){
foreach($request->input('prefs') as $pref){
$q->orWhere('pref',$pref);
}
});
}
書き方は配列 prefs があれば無名関数(クロージャ)を使って foreach でチェックした都道府県を回してwhere句に渡してあげるように記述します。
当然ですが、複数セレクトで選択した都道府県の内部はOR検索になります。
なのでクエリーメソッドは orWhere句 を使います。
よく使う機能なのですが、書き方を忘れるので今回は備忘録として残しました。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。