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 からご連絡ください。
それでは!
人気記事