LoginSignup
4
2

More than 5 years have passed since last update.

LaravelにRansack的なのがなかったので、Model側にそれっぽいのを定義してみた。

Last updated at Posted at 2019-02-06

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);
}

共通関数化する

こちらにあるようにこれを共通関数化してしまっても良いと思ったのですが、今回はやらず。
しておくといいことがあるかもしれないです

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2