あきぞらです。
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
と遅いとよく言われるようです。
使わないで済む方法があるのであればそちらを使う方が良いようです。
では、また!