2
5

More than 1 year has passed since last update.

【Laravel】Whereでクロージャ(無名関数)を使う

Last updated at Posted at 2023-03-06

クロージャを使わないケース

Tシャツを管理するためのtshirtsテーブルの中にpriceとcolorというカラムがあったとします。

「priceが2000円以下でcolorがblueのTシャツ」を探したいのであれば
以下のように単純にwhereを繋げるだけで問題ありません。

$tshirts = Tshirt::where('price', '<=', 2000)->where('color', '=', 'blue')->get();

クロージャを使うケース

もう少し複雑なケース、例えば「priceが1000円以下のTシャツ、もしくはpriceが2000円以下でcolorがblueのTシャツ」を探したいという場合は、以下のようにクロージャを使用して検索することができます。

$tshirts = Tshirt::where('price', '<=', 1000)
                ->orWhere(function ($q) {
                      $q->where('color', 'blue')->where('price', '<=', 2000);
                })->get();

$qはQueryBuilderのインスタンスです。少し複雑に見えるかもしれませんが、こういう書き方をするものなんだと覚えてしまばすぐに慣れると思います。

ちなみに、一番初めに書いた「priceが2000円以下でcolorがblueのTシャツ」を、あえてクロージャを使って書くと以下のようになります。

$tshirts = Tshirt::where(function ($q) {
                    $q->where('price', '<=', 2000)
                          ->where('color', '=', 'blue');
                })->get();
2
5
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
2
5