我对Laravel的chunk
和each
函数感到很头疼,以便分解结果集。
我有一个表格,其列processed
的值为0
。如果我运行以下代码,它将遍历所有13002条记录。
Record::where(['processed' => 0])->each(function ($record) {
Listing::saveRecord($record);
}, 500);
此代码将贯穿所有13002条记录。但是,如果我添加一些代码来将记录标记为已处理,那么事情会变得非常糟糕。
Record::where(['processed' => 0])->each(function ($record) {
$listing_id = Listing::saveRecord($record);
$record->listing_id = $listing_id;
$record->processed = 1;
$record->save();
}, 500);
此代码运行时,仅处理6002条记录。
根据我对事物的理解,在chunk
(each
贯穿chunk
)的每次迭代中,它正在执行新的声明。
我来自使用Yii2而且我对此举感到非常满意,除了这个打嗝,让我把头发拉出来。 Yii2具有类似的功能(each
和batch
),但它们似乎使用结果集和指针,因此即使您在处理结果时更新表,也不会影响结果集。
在Laravel中实际上有更好的方法吗?
答案 0 :(得分:1)
试试这个
Records::where('processed',0)->chunk(100, function($records){
foreach($records as $record)
{
// do your stuff...
}
});
https://laravel.com/docs/5.3/queries#chunking-results
对于我的手机上的缩进感到抱歉,并且这种情况并不好用..