Laravel 8 分塊結果

2021-07-19 11:11 更新

如果你需要處理上千上萬條數據庫記錄,你可以考慮使用 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]);
        }
    }); 

注意:在分塊的回調里面更新或刪除記錄時,對主鍵或外鍵的任何更改都可能影響分塊查詢。這可能會導致記錄沒有包含在分塊結果中。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號