Laravelコレクション操作の必須メソッドまとめ!効率的なデータ処理を実現しよう

技術

こんにちは!

Laravelのコレクション(Illuminate\Support\Collection)は、データ操作を簡潔かつ直感的に行える強力なツールです。コレクションを使いこなせば、配列やオブジェクトの操作を効率化し、より読みやすくメンテナンスしやすいコードを書くことができます。

この記事では、Laravelでコレクションを操作する際によく使用する代表的なメソッドを、具体的なコード例とともに解説します。これをマスターすれば、データ処理の生産性が飛躍的に向上します!


コレクション操作でよく使用するメソッド一覧とコード例


データ変換・加工

map()

各要素を変換して新しいコレクションを生成します。

  • 使い方:データを加工し、新しい形式で再構築したい場合に使用します。
$products = collect([
    ['name' => 'Product A', 'price' => 100],
    ['name' => 'Product B', 'price' => 200],
]);

$updatedProducts = $products->map(function ($product) {
    $product['price_with_tax'] = $product['price'] * 1.1; // 10%の税金を追加
    return $product;
});

dd($updatedProducts->all());
// 結果:
// [
//     ['name' => 'Product A', 'price' => 100, 'price_with_tax' => 110],
//     ['name' => 'Product B', 'price' => 200, 'price_with_tax' => 220],
// ]

pluck()

コレクション内の特定のキーの値を抽出します。

  • 使い方:特定のカラムやプロパティだけを取得したい場合に使用します。
$users = collect([
    ['id' => 1, 'name' => 'Alice', 'email' => 'alice@example.com'],
    ['id' => 2, 'name' => 'Bob', 'email' => 'bob@example.com'],
]);

$emails = $users->pluck('email');

dd($emails->all());
// 結果: ['alice@example.com', 'bob@example.com']

transform()

元のコレクションを直接変更します。

  • 使い方:元データをそのまま更新したい場合に使用します。
$users = collect([
    ['name' => 'Alice', 'is_active' => true],
    ['name' => 'Bob', 'is_active' => false],
]);

$users->transform(function ($user) {
    $user['status'] = $user['is_active'] ? 'Active' : 'Inactive';
    return $user;
});

dd($users->all());
// 結果:
// [
//     ['name' => 'Alice', 'is_active' => true, 'status' => 'Active'],
//     ['name' => 'Bob', 'is_active' => false, 'status' => 'Inactive'],
// ]

フィルタリング

filter()

条件に一致する要素だけを残した新しいコレクションを返します。

  • 使い方:条件に基づいてデータを絞り込みたい場合に使用します。
$orders = collect([
    ['id' => 1, 'amount' => 500],
    ['id' => 2, 'amount' => 1200],
    ['id' => 3, 'amount' => 700],
]);

$expensiveOrders = $orders->filter(function ($order) {
    return $order['amount'] > 1000;
});

dd($expensiveOrders->all());
// 結果: [['id' => 2, 'amount' => 1200]]

where()

特定のキーと値が一致する要素をフィルタリングします。

  • 使い方:簡単な条件でデータを絞り込みたい場合に使用します。
$users = collect([
    ['id' => 1, 'name' => 'Alice', 'status' => 'active'],
    ['id' => 2, 'name' => 'Bob', 'status' => 'inactive'],
]);

$activeUsers = $users->where('status', 'active');

dd($activeUsers->all());
// 結果: [['id' => 1, 'name' => 'Alice', 'status' => 'active']]

reject()

条件に一致しない要素だけを残します(filter()の反対)。

  • 使い方:特定の条件を除外したい場合に使用します。
$users = collect([
    ['id' => 1, 'name' => 'Alice', 'status' => 'active'],
    ['id' => 2, 'name' => 'Bob', 'status' => 'inactive'],
]);

$inactiveUsers = $users->reject(function ($user) {
    return $user['status'] === 'active';
});

dd($inactiveUsers->all());
// 結果: [['id' => 2, 'name' => 'Bob', 'status' => 'inactive']]

データ検索

first()

条件に一致する最初の要素を取得します。

  • 使い方:条件に一致する1件だけを取得したい場合に使用します。
$users = collect([
    ['id' => 1, 'name' => 'Alice', 'status' => 'active'],
    ['id' => 2, 'name' => 'Bob', 'status' => 'inactive'],
]);

$firstActiveUser = $users->first(function ($user) {
    return $user['status'] === 'active';
});

dd($firstActiveUser);
// 結果: ['id' => 1, 'name' => 'Alice', 'status' => 'active']

contains()

コレクション内に特定の値や条件に一致する要素が存在するかを判定します。

  • 使い方:データの存在を確認したい場合に使用します。
$users = collect([
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
]);

$hasAlice = $users->contains('name', 'Alice');

dd($hasAlice);
// 結果: true

集約

sum()

コレクション内の値を合計します。

  • 使い方:数値データの合計を計算したい場合に使用します。
$orders = collect([
    ['id' => 1, 'amount' => 500],
    ['id' => 2, 'amount' => 1200],
    ['id' => 3, 'amount' => 700],
]);

$totalAmount = $orders->sum('amount');

dd($totalAmount);
// 結果: 2400

count()

コレクション内の要素数を返します。

  • 使い方:データの件数を取得したい場合に使用します。
$users = collect([
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
]);

$userCount = $users->count();

dd($userCount);
// 結果: 2

まとめ:Laravelコレクションを使いこなそう!

Laravelのコレクションは、データ操作を効率化する強力なツールです。以下のようなポイントを押さえて、日々の開発に活用してください。

  • 変換や加工map(), pluck(), transform()
  • フィルタリングfilter(), where(), reject()
  • 検索first(), contains()
  • 集約sum(), count()

これらのメソッドを組み合わせることで、複雑なデータ処理も簡潔で読みやすいコードにできます。ぜひ活用して、Laravelでの開発をさらに効率的に進めてください!

コメント

タイトルとURLをコピーしました