ホーム > Laravel > Laravelのコレクションとは?使い方を初心者向けに解説。
Laravel

Laravelのコレクションとは?使い方を初心者向けに解説。

いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。

Laravelのコレクションについての概要と、使い方を初心者向けに解説します

この記事の内容は、

Laravel 公式

に書いてある内容を抜粋した感じになっています。

コレクションとは?

ざっくりいうと、配列のようなものです。

Laravel においては以下のようなときに、コレクションを使うことになります。

  1. データの取得で get()や all()したときに取得するもの

  2. 自分で collect を使って生成するもの

なぜコレクションが必要なのか?

コレクションを使うことによって、

配列の整形が便利になります

例えば、絞り込みであったり、並び替えが便利になります。

① 単純な配列でコレクションを作る

key は指定せずに、配列的に並べるとこういう出力になります。

  $array = [1,2,3,4,5];
  $collection1 = collect($array);
  dd($collection1);
Illuminate\Support\Collection {#338 ▼
  #items: array:5 [▼
    0 => 1
    1 => 2
    2 => 3
    3 => 4
    4 => 5
  ]
}

配列の順番を指定すればそこだけ取得できます。

dd($collection1[0]);
//1が出力される

②key を使ってコレクションを作る

さきほどとは違い、key を使います。

        $array2 = [
            [
                'user_id'=> 1,
                'name' => 'さとう',
            ],
            [
                'user_id'=> 2,
                'name' => 'たける',
            ],
            [
                'user_id'=> 3,
                'name' => 'しゅん',
            ],
            [
                'user_id'=> 4,
                'name' => 'おぐり',
            ],
        ];
        $collection2 = collect($array2);
        dd($collection2);

出力


Illuminate\Support\Collection {#350 ▼
#items: array:4 [▼
0 => array:2 ["user_id" => 1
"name" => "さとう"
]
1 => array:2 ["user_id" => 2
"name" => "たける"
]
2 => array:2 ["user_id" => 3
"name" => "しゅん"
]
3 => array:2 ["user_id" => 4
"name" => "おぐり"
]
]
}

配列のときのように順番を指定します。

dd($collection2[0]);

出力

//1番目のデータだけ取得されました。
array:2 ["user_id" => 1
  "name" => "さとう"
]

特定の key を取得するとき

dd($collection2[0]['user_id']);

出力

//1番目のuser_idだけ取得できました
1

メリット

検索や並び順を変えるなど、データを操作することが簡単です。

さきほど key を使った例を作ったと思いますが、

その中から user_id が 1 のものを取得したいと思います。

//whereはkeyが何か?で検索することができます
dd($collection2->where('user_id',1));

出力

//user_idが1のものを取得しました。
//もし、user_idが1のものが複数あれば複数取得されます。なので、この取得あsれたデータはコレクションです
Illuminate\Support\Collection {#353 ▼
  #items: array:1 [▼
    0 => array:2 ["user_id" => 1
      "name" => "さとう"
    ]
  ]
}

これらの検索する where とかは、ほとんどが eloquent でデータベースからデータを取得するときに使うものと名前が同じなので(where とか orderBy とか)分かりやすいです。

注意点

key の振り直しをしないと順番が変わらない

例えば Eloquent を使って絞り込みをする時は、データ取得の段階で key が 0 からレコードの数だけ数字が振られていると思います。

コレクションで配列を整形する場合は、key の振り直しをしないと欠番になるだけで、フロントで思ったような挙動にならないことがあります。

なので、コレクションを整形する場合、例えば filter 関数で絞り込みをした場合は

$items = $collection2->filter(function ($item) {
  return $item['user_id'] === 1;
})->values(); //values()を使う

dd($newCollection);

このようにvalues()を使うことで key を振り直してくれます。

データベースからデータを取得するときはコレクション?

A.複数で取得されるものはコレクションです。

(単数で習得されるものはオブジェクトです)

つまり、

Post::get();
Post::all();

はコレクションで複数のデータが取得されます。

A. 単数で取得されるものはオブジェクトです。

Post::first();
Post::find(1);

はオブジェクトで1個のデータが取得されます。

おわりに

Eloquent の関数名とほとんど同じ関数名で、コレクションは整形することができます。

リレーションなどで複雑な形になったときの並び替えなど、Eloquent だけでは表現しづらいケースもあります。

そんなときに、コレクションを使ったデータの整形をすると楽になったりします。

【Laravel】リレーション先のデータを元に並び替えする方法

以上、参考になれば幸いです。

フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。