Syn*_*kSA 3 php laravel laravel-5.2
我对 Laravelchunk和each分解结果集的功能感到头疼。
我有一张表,其中有一列processed值为0. 如果我运行以下代码,它将遍历所有 13002 条记录。
Record::where(['processed' => 0])->each(function ($record) {
Listing::saveRecord($record);
}, 500);
Run Code Online (Sandbox Code Playgroud)
此代码将运行所有 13002 条记录。但是,如果我添加一些代码将记录标记为已处理,事情就会变得非常糟糕。
Record::where(['processed' => 0])->each(function ($record) {
$listing_id = Listing::saveRecord($record);
$record->listing_id = $listing_id;
$record->processed = 1;
$record->save();
}, 500);
Run Code Online (Sandbox Code Playgroud)
当此代码运行时,仅处理 6002 条记录。
根据我对事情的理解,在chunk( eachrun through chunk) 的每次迭代中,它正在执行一个新语句。
我是从使用 Yii2 过来的,我对这个举动很满意,除了这个打嗝,它让我把头发拉出来。Yii2 有类似的函数(each和batch),但它们似乎使用结果集和指针,因此即使您在处理结果时更新表,它也不会影响您的结果集。
在 Laravel 中实际上有更好的方法来做到这一点吗?
小智 6
尝试这个
Records::where('processed',0)->chunk(100, function($records){
foreach($records as $record)
{
// do your stuff...
}
});
Run Code Online (Sandbox Code Playgroud)
https://laravel.com/docs/5.3/queries#chunking-results
抱歉,在我的手机上出现了缩进,这显然不起作用..
| 归档时间: |
|
| 查看次数: |
4927 次 |
| 最近记录: |