如何在 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.""; } } } }
輸出
以上程式碼的輸出為:

廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP