Laravel Collectionのpluckとlistsについてまとめ(5.2以降はpluck)
Laravelの5系のpluckとlistsについて、混乱したのでまとめておきます。
ことの発端は、Return collection from the query builder #10478にあるとおり、listsメソッドがQuery BuilderとEloquentで異なる戻り値を返却する仕様となってしまったことを、コミュニティが解決しようとしたためで5.3で無事に解決しました。
lists
従来のLaravel(~5.1)では、Collectionに対してlistsメソッドを利用することで、引数に指定したkeyのvalues()を取得することができました。
例
$users = collect([ ['id' => 1, 'name' => '太郎'], ['id' => 2, 'name' => '二郎'], ]); $users->lists('name'); // ['太郎', '二郎'] $users->lists('name', 'id'); // [1 => '太郎', 2 => '二郎']
lists == pluck(listsメソッドは非推奨)
Laravel5.2で、新たにpluckメソッドが実装されました。内部の実装はlistsと完全に同一でした。この時点でlistsメソッドは@depricated(非推奨)となりました。
ドキュメント
https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0
Deprecations
The lists method on the Collection, query builder and Eloquent query builder objects has been renamed to pluck. The method signature remains the same.
ソースコード
https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Builder.php#L458
/**
* Alias for the “pluck” method.
*
* @param string $column
* @param string $key
* @return \Illuminate\Support\Collection
*
* @deprecated since version 5.2. Use the “pluck” method directly.
*/
public function lists($column, $key = null)
{
return $this->pluck($column, $key);
}
ということで、5.2ではlistsは使わないようにしましょう。
lists → pluck
Laravel5.3で、listsメソッドはなくなりました。今後はpluckメソッドを利用しましょう。
$users = collect([ ['id' => 1, 'name' => '太郎'], ['id' => 2, 'name' => '二郎'], ]); $users->pluck('name'); // ['太郎', '二郎'] $users->pluck('name', 'id'); // [1 => '太郎', 2 => '二郎']
以上