Laravel

Laravelのコレクションとは?ややこしくない説明をしてみます

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

Laravel のコレクションについて説明してみます。初心者的には「そもそもコレクションってなんやねーん」ってなると思うので、そこらへんの回答になればと思います。

この記事の内容は、

Laravel 公式

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

コレクションとは?

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

感覚的に、以下のようにも分けられます。

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

② 自分で 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 とか)分かりやすいです。

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

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

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

つまり、

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

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

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

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

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

まとめ

以上です。

個人的に、文字で説明されるより、こういうのがコレクションっていう感じで説明した方が分かりやすいかなと思ったので書いてみました。

参考になった人がいればうれしいです!

感想や意見ありましたら Twitter の DM からご連絡ください。

それでは!

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する