Разделение результатов на куски QueryBuilder
Если необходимо обработать тысячи записей БД, можно использовать метод chunk()
. Этот метод получает небольшой кусок результатов за раз и отправляет его в замыкание для обработки. Этот метод очень полезен для написания artisan-команд, которые обрабатывают тысячи записей:
app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB
class PostController extends Controller
{
public function show()
{
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
foreach ($users as $user) {
// обработка очередной порции
}
});
}
Можно остановить обработку последующих «кусков» вернув false
из замыкания:
app/Http/Controllers/PostController.php<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; // подключаем фасад DB
class PostController extends Controller
{
public function show()
{
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
// обработка очередной порции
return false;
});
}