Posted at

Laravel Eloquentで大量のデータを取得する場合

More than 3 years have passed since last update.

LaravelのEloquentで大量のデータをgetすると、

メモリー違反が発生する場合があります。

そんなときは、getの代わりにchunkを使いましょう。


class SomeContent extends Eloquent {
}

のようなEloquent継承のクラスがあったとして、


SomeContent::where('created_at', '>=', Carbon\Carbon::yesterday()->toDateString())
->orderBy('id')
->chunk(100, function ($someContents) {
foreach ($someContents as $someContent) {
$someContent->touch();
}
}
);

これで、100件ごとにデータが取得され、クロージャが実行されます。