memo

リクエストパラメータによってクエリビルダに条件付で付加するWHENメソッドについて

LaravelでAPIをつくっています。

リクエストのパラメータをLaravelのクエリビルダを使って検索条件にしているのですが、そのパラメーターが入っているかどうかを判断してクエリービルダーに付加するには【WHENメソッド】といった便利な機能があります。

そのWHENメソッドを自分なりに使った方法についてメモ。

WHENメソッドとは

ある条件がtrueの場合の時のみ、クエリへ特定の文を適用したい場合があります。例えば特定の入力値がリクエストに含まれている場合に、where文を適用する場合です。whenメソッドで実現できます。

データベース:クエリビルダ 5.3 Laravel

最低・最高金額の絞り込みをするクエリ

リクエストのパラメータに最低金額(MIN_PRICE)と最高金額(MAX_PRICE)が含まれたときだけ、WHENメソッドを使いクエリビルダに付加するサンプルです。

解説

クエリビルダにWHENメソッドを付けています。

第1引数に$PRICE_CHECKを割り当てており、変数初期値ではfalseになっていますが、【MIN_PRICEとMAX_PRICEのパラメータがあるかチェックして処理】のところで、パラメータにどちらか一方でも存在するときは、$PRICE_CHECK = trueとしています。

なので、MIN_PRICEかMAX_PRICEが存在する時はWHEN節のクエリが実行されます。

use ($MIN_PRICE, $MAX_PRICE)は、クロージャで利用する変数を渡すために使います。

ちなみに、第1引数がfalseだったときに第3引数に別のクロージャを渡すこともできます。
データベース:クエリビルダ 5.3 Laravel

まとめ

現在作成しているLaravelを使ったAPIは、パラメータの組み合わせによってクエリも変わってくるのですが、他の人がどうやっているのか知りたいです。