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