LOADING

BLOG

HOME > BLOG > 技術 > PHP > Laravel > Laravelでコレクションに汎用メソッドを追加するコレクションマクロ

Laravelでコレクションに汎用メソッドを追加するコレクションマクロ

LaravelPHP技術

use Illuminate\Support\Collection;

public function boot()
{
    Collection::macro('toUpper', function () {
        return $this->map(function ($value) {
            return strtoupper($value);
        });
    });
}

このマクロを定義した後は、任意のコレクションに対して toUpper メソッドを呼び出すことができるようになります。

$collection = collect(['first', 'second', 'third']);
$upper = $collection->toUpper();

// ['FIRST', 'SECOND', 'THIRD']

実践的なコレクションマクロの例

次に、もう少し実践的なコレクションマクロの例を見てみましょう。例えば、Eコマースのアプリケーションで、商品のコレクションから特定の価格範囲の商品だけを抽出するカスタムメソッドを作成するとします。

Collection::macro('filterByPriceRange', function ($min, $max) {
    return $this->filter(function ($item) use ($min, $max) {
        return $item->price >= $min && $item->price <= $max;
    });
});

このマクロを使用すると、以下のように特定の価格範囲の商品のみを簡単に取得できます。

$products = Product::all();
$filtered = $products->filterByPriceRange(1000, 2000);

このようにコレクションマクロを活用することで、コードの再利用性を高めつつ、ビジネスロジックをより読みやすく保守しやすい形で実装できます。

まとめ

Laravelのコレクションマクロは、標準のコレクションメソッドだけでは不十分な場合に、非常に強力なカスタマイズ性を提供します。マクロを使用することで、アプリケーションのあらゆる場所で使いやすい、独自のコレクション操作メソッドを簡単に作成し、適用することができます。Laravelを使った開発を行っている方は、是非この機能を活用してみてください。