如何在 Laravel 中分塊處理自定義查詢的結果?


如果您的資料庫表包含大量資料,則最好使用chunk()方法。chunk()方法可用於 DB facade 和 Eloquent 模型。

chunk()負責一次獲取少量資料,結果在閉包中進行處理。

考慮以下 users 表,其中包含 1000 條記錄。我們將使用chunk()一次檢索 100 條記錄。

示例 1

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class UserController extends Controller { public function index() { DB::table('users')->orderBy('id')->chunk(100, function ($users) { foreach ($users as $user) { echo $user->id."=>".$user->name." "; } }); } }

要使用 DB facade,請包含類Illuminate\Support\Facades\DB;

在上面的示例中,chunk()將負責一次獲取 100 條記錄並在foreach()中使用。它將批次處理 100 條記錄,直到所有記錄都被提取。

輸出

以上輸出為:

示例 2

如果您想停止處理,可以按如下所示進行:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; //use App\Models\User; use Illuminate\Support\Facades\DB; class UserController extends Controller{ public function index() { DB::table('users')->orderBy('id')->chunk(100, function ($users) { foreach ($users as $user) { echo $user->id."=>".$user->name." "; if ($user->id == 150) { return false; } } }); } }

您可以在不需要chunk()進一步處理的條件下返回 false。

輸出

以上輸出如下:

示例 3

在 Eloquent User 模型上使用chunk()

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; //use Illuminate\Support\Facades\DB; class UserController extends Controller{ public function index() { User::orderBy('id')->chunk(100, function ($users) { foreach ($users as $user) { echo $user->id."=>".$user->name." "; } }); } }

輸出

以上程式碼的輸出為:

示例 4

在 Eloquent 模型上使用chunk()

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class UserController extends Controller{ public function index() { $users = User::all(); $chunkedUsers = $users->chunk(10); foreach ($chunkedUsers as $records) { foreach($records as $user) { echo $user->id."=>".$user->name.""; } } } }

輸出

以上程式碼的輸出為:

更新於:2022年8月30日

7K+ 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.