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 とか)分かりやすいです。
注意点
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】リレーション先のデータを元に並び替えする方法
以上、参考になれば幸いです。