Laravel并贯穿一批结果

时间:2016-09-23 20:54:48

标签: php laravel laravel-5.2

我对Laravel的chunkeach函数感到很头疼,以便分解结果集。

我有一个表格,其列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条记录。

根据我对事物的理解,在chunkeach贯穿chunk)的每次迭代中,它正在执行新的声明。

我来自使用Yii2而且我对此举感到非常满意,除了这个打嗝,让我把头发拉出来。 Yii2具有类似的功能(eachbatch),但它们似乎使用结果集和指针,因此即使您在处理结果时更新表,也不会影响结果集。

在Laravel中实际上有更好的方法吗?

1 个答案:

答案 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

对于我的手机上的缩进感到抱歉,并且这种情况并不好用..