
あきぞらです。
Laravelで開発をしていて、EloquentでwhereHasを使ってクエリを実行しようとしたときに、
変数を渡して動的にクエリを実行したい場面がありました。
今回はその方法を紹介していきます。
function($q)に変数を渡す
use( 変数 )と渡してあげると、変数を扱うことができます。
以下では、$paramという変数をuse($param)と宣言することで、
コールバック関数の中で使用することができます。
$param = 'science';
$books = Book::whereHas('tag', function($query) use($param) {
$query->where('tag', $param);
})
->get();
複数の変数を渡す
複数の変数を渡したい場合はどうするのでしょうか。
正しい方法か分からないのですが、useする変数を配列にしてみました。
$params = [
'tag' => 'science',
'author' => 'akizora',
];
$books = Book::whereHas('tag', function($query) use($params) {
$query->where('tag', $params['tag']);
$query->where('author', $params['author']);
})
->get();
上はAND検索になっていると思うのですが、複数の条件を動的にすることができました。
whereHasは遅い
whereHasと遅いとよく言われるようです。
使わないで済む方法があるのであればそちらを使う方が良いようです。
では、また!