W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
如果你需要處理上千上萬條數據庫記錄,你可以考慮使用 chunk
方法。該方法每次獲取結果集的一小塊,并將其傳遞給 Closure
函數進行處理。該方法在 Artisan 命令 中處理大量查詢數據的時候非常有用。例如,我們可以將全部 users
表數據切割成一次處理 100 條記錄的一小塊:
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
foreach ($users as $user) {
//
}
});
你可以通過在 Closure
中返回 false
來終止繼續(xù)獲取分塊結果:
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
// Process the records...
return false;
});
如果要在分塊結果中更新數據庫記錄,則塊結果可能會和預計的返回結果不一致。 因此,在分塊更新記錄時,最好使用 chunkById
方法。 此方法將根據記錄的主鍵自動對結果進行分頁:
DB::table('users')->where('active', false)
->chunkById(100, function ($users) {
foreach ($users as $user) {
DB::table('users')
->where('id', $user->id)
->update(['active' => true]);
}
});
注意:在分塊的回調里面更新或刪除記錄時,對主鍵或外鍵的任何更改都可能影響分塊查詢。這可能會導致記錄沒有包含在分塊結果中。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: