リレーショナルデータの値をセレクトボックスで絞る検索を実装する(Laravel-Admin)


例えば、 筆者(author)と記事(article)を格納しているDBがあるとすると、
管理画面で記事を検索する場合に、「筆者が男性の記事を検索したい」のように、リレーショナルデータをもとに絞り込みをしたい場合があるかと思います。

公式ドキュメントを見てもよくわからなかったので、色々調べて実装してみました。

絞り込みなので、Laravel-AdminのControllerのgridメソッドの中に書き書きします。

$grid->filter(function ($filter) {
    $filter->where(function ($query) {
        $gender = $this->input;
        $query->whereHas('author', function ($query) use ($gender) {
            $query->where('gender', $gender);
        });
    }, '筆者の性別', 'author_gender')->select([1 => "男性", 1 => "女性"]);
});

こういうふうに書くことができます。
whereの第二引数の「筆者の性別」の部分はラベルの名前で、第三引数の「author_gender」の部分は検索した際のURLのクエリとして使われているっぽいです。

whereとselectの両方を使う方法があったんですね。
ぜひみなさんも困ったら使ってみてください!