クロージャを使わないケース
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();