概要
自分が普段仕事で良く使うCollectionのメソッドを抜粋して紹介します。
EloquentCollection特有のメソッドは除外しています
そもそもCollectionとは
GPT「
Laravelにおける「Collection」は、データを効果的かつ柔軟に処理するための便利なクラスです。これはPHPの標準的な配列を拡張し、多くの操作やメソッドを提供するものです。
」
データの集まりを色々操作しやすくしている配列の拡張版みたいなものという解釈でOKです。
配列をCollectionに変換して利用するのが一般的です。
一覧
all
all
メソッドはコレクションを配列に変換します
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Doe', 'age' => 35],
]);
dd($collection->all());
// 結果:
//array:3 [▼
// 0 => array:2 [▼
// "name" => "John"
// "age" => 30
// ]
// 1 => array:2 [▼
// "name" => "Jane"
// "age" => 25
// ]
// 2 => array:2 [▼
// "name" => "Doe"
// "age" => 35
// ]
//]
where
where
メソッドは、コレクション内の要素を特定の条件でフィルタリングします。
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Doe', 'age' => 35],
]);
$filtered = $collection->where('age', '>=', 30);
dd($filtered->all());
// 結果:
//array:2 [▼
// 0 => array:2 [▼
// "name" => "John"
// "age" => 30
// ]
// 2 => array:2 [▼
// "name" => "Doe"
// "age" => 35
// ]
//]
厳密な比較を行いたい時はwhereStrict()
を使いましょう
whereIn
whereIn
メソッドは、第一引数のキーに対して、第二引数の配列に含まれてる値を持つ要素をフィルタリングします。
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Doe', 'age' => 35],
]);
$filtered = $collection->whereIn('age', [30,35]);
dd($filtered->all());
// 結果:
//array:2 [▼
// 0 => array:2 [▼
// "name" => "John"
// "age" => 30
// ]
// 2 => array:2 [▼
// "name" => "Doe"
// "age" => 35
// ]
//]
first
first
メソッドは、コレクションの最初の要素を取得します。
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Doe', 'age' => 35],
]);
$filtered = $collection->first();
dd($filtered);
// 結果:
//array:2 [▼
// "name" => "John"
// "age" => 30
//]
firstWhere
firstWhere
メソッドは文字通りfirst
メソッドとwhere
メソッドをセットにしたメソッドです。
条件に一致した最初の要素を取得します。
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Doe', 'age' => 35],
]);
$filtered = $collection->firstWhere('age', '>=', 30);
dd($filtered);
// 結果:
//array:2 [▼
// "name" => "John"
// "age" => 30
//]
filter
filter
メソッドは、引数に受け取ったコールバック関数内で条件に一致した要素を取得します。
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Doe', 'age' => 35],
]);
$filtered = $collection->filter(function (array $value){
return $value['age'] >= 26;
});
dd($filtered->all());
//array:2 [▼
// 0 => array:2 [▼
// "name" => "John"
// "age" => 30
// ]
// 2 => array:2 [▼
// "name" => "Doe"
// "age" => 35
// ]
//]
whereメソッドとの違い
whereメソッドの実態コードを見てみましょう。中でfilterメソッドを使っています。
単純な絞り込みをする際にはwhere
メソッドの方がスマートに書けます。
複雑な絞り込みの際にはfilter
メソッドを使いましょう。
public function where($key, $operator = null, $value = null)
{
return $this->filter($this->operatorForWhere(...func_get_args()));
}
contains
contains
メソッドは、指定した条件に一致する要素が存在する場合にtrueを返します。
filter
メソッドのようにコールバック関数を引数に与える事も可能です
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Doe', 'age' => 35],
]);
dd($collection->contains('age',25));
// 結果:
//true
$collection = collect([1, 2, 3, 4, 5]);
$collection->contains(function (int $value, int $key) {
return $value > 5;
});
// 結果:
// false
pluck
pluck
メソッドは指定したキーの値だけを取得します。
配列を引数に渡して複数のキーの値を取り出すことも出来ます。
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Doe', 'age' => 35],
]);
$names = $collection->pluck('name');
dd($names->all());
$collection = collect([
['product_id' => 'prod-100', 'name' => 'Desk'],
['product_id' => 'prod-200', 'name' => 'Chair'],
]);
$plucked = $collection->pluck('name', 'product_id');
dd($plucked->all());
// 結果:
['prod-100' => 'Desk', 'prod-200' => 'Chair']
isEmpty
isEmpty
メソッドは、collectionが空の場合にtrueを返します。
逆に空じゃない時にtrueを返すisNotEmpty()
もあります。
$collection = collect([
['name' => 'John', 'age' => 30],
['name' => 'Jane', 'age' => 25],
['name' => 'Doe', 'age' => 35],
]);
dd($collection->isEmpty());
// 結果:
// false