Laravelでもransack的なことをできるように
Controllerでやることは $request を検索メソッドに渡すだけにするため
Model側にクラスメソッドを定義
Controller
HogeController
public function index(Request $request) {
$clients = Hoge::search($request);
}
Modelの検索ロジック
array_keys($request->all()
でフォームから渡された項目全てのkeyを取得し、それをeachで回す。
ページネーションは好みですが、今回はつけておいて欲しいので入れておきました、デフォルト50です。
HogeModel
public static function search($request, $number = 50 ){
$query = Self::query();
foreach ($request->all() as $key => $value) {
$query->where($key, 'like', '%'.$value.'%');
}
return $query->paginate($number);
}
共通関数化する
こちらにあるようにこれを共通関数化してしまっても良いと思ったのですが、今回はやらず。
しておくといいことがあるかもしれないです