Release v6.1.0 · laravel/framework
Eager Lazy Collections Added to Laravel 6.1 – Laravel News
Laravel v6.1.0がリリースされました。Laravelはバージョン6からセマンティックバージョニングを採用しているため、v6.0.xからv6.1.0への移行時にソースコードを修正する必要はありません。composer updateのみでOKです。
私的に最もありがたいのは
Fixed migration class duplicate check in make:migration command (#30095)
です。何が起きるかというと、次のようにmake:migrationによるマイグレーションファイル生成時、migrateコマンド実行時にエラーの起きるファイルの生成をしようとしていた場合、それを止めてくれます。
>php artisan make:migration modify_column_in_users_table Created Migration: 2019_10_03_173420_modify_column_in_users_table >php artisan make:migration modify_column_in_users_table InvalidArgumentException : A ModifyColumnInUsersTable class already exists.
今まではファイル名の接頭辞にある時刻の違いによって同名クラスを持つファイルを生成できていましたが、未然に防がれるようになりました。これによっていざマイグレーションしようという際に失敗する場合が減ります。特に開発者が一人の時は滅多に起きなくなるでしょう。
以下Laravel Newsで取り上げらているEager Lazy Collectionsについての簡単な解説です。
Added Illuminate\Support\LazyCollection::eager() method (#29832)
LazyCollectionにeager()メソッドが増えました。LazyCollectionはLaravel6からの新機能です。これは必要な分だけデータを持つCollectionとでもいうべきものです。LazyCollectionはCollectionより処理が遅くなりがちですが、とにかくメモリを食いません。DB(データベース)に保存されているPHPに許可されているメモリサイズを優に超えるデータ全体を対象にSQLを意識せずなんやかんやすることもできます。
eagerメソッドはLazyCollectionのままCollection的なふるまいをする速度優先用メソッドです。LazyCollectionのプロパティに対象全体を保持することによってCollection同様の速度を実現します。対象全体を保持するのでメモリエラーの危険が顕在化しますが、LazyCollectionインスタンスをCollectionインスタンスに移す必要がなくなります。
$users = User::cursor(); $users = $users->eager();// ここで$users内部に保持 $count = $users->count();// $users内部の参照で終わるから高速 $users->each(function ($user) { // $users内部の参照で終わるから高速 // });
特別何もしなくても恩恵にあずかれる変更にSeeder実行時のCLIの詳細化があります。
Added runtime information output for seeders (#30086)
Laravel6.1.0からはdb:seedを実行した時、次のように各Seederの実行時間が表示されます。
Seeding: UserSeeder Seeded: UserSeeder (1.56 seconds)