Php Laravel 5系列的大规模更新

Php Laravel 5系列的大规模更新,php,mysql,laravel,eloquent,laravel-5,Php,Mysql,Laravel,Eloquent,Laravel 5,我正在从事一个项目,其中我需要从SQL表中获取至少100k数据(数据是表上索引的6位代码),将它们导出到CSV文件中,并运行更新查询以更新其状态 导出时间仅需几秒钟,但由于更新查询,需要很长时间。我正在寻找一种有效的方法来完成这项任务 这是我的密码: $filename = 'sample.csv'; $handle = fopen($filename, 'w+'); $collection = Code::select('code')->where('statu

我正在从事一个项目,其中我需要从SQL表中获取至少100k数据(数据是表上索引的6位代码),将它们导出到CSV文件中,并运行更新查询以更新其状态

导出时间仅需几秒钟,但由于更新查询,需要很长时间。我正在寻找一种有效的方法来完成这项任务

这是我的密码:

    $filename = 'sample.csv';
    $handle = fopen($filename, 'w+');

    $collection = Code::select('code')->where('status', 0)->take($request->quantity)->get();

    foreach ($collection->chunk(500) as $codes) {
        foreach ($codes as $code) {
            fputcsv($handle, [
              $code->code,
              ]);
              // this update query making the whole process taking long time
              Code::where('code', $code->code)->update(['status' => 1]); 
        }
    }

    fclose($handle);

我正在寻找更新这些数据的更好方法。有什么建议吗?

您不能在文件写入后进行批量更新吗

$filename = 'sample.csv';
$handle = fopen($filename, 'w+');

$query = Code::select('code')->where('status', 0)->take($request->quantity);

foreach ($query->get()->chunk(500) as $codes) {
    foreach ($codes as $code) {
        fputcsv($handle, [
          $code->code,
          ]);
    }
}
$query->update(['status' => 1]); // Update all of them in one go

fclose($handle);

我认为Laravel 5有一种方法可以对集合执行更新,而不仅仅是对集合中的单个模型执行更新。他们没有。下面列出了可以用于收集的可用方法:我尝试了您的代码,但遇到了问题。首先,chunk()方法无法与$query一起运行,它需要一个闭包作为第二个参数。第二,当我用闭包修复它时,它从代码表中获取所有行,而不是指定的数量。我用以下代码修复了这个问题:
$collection=code::select('code')->where('status',0)->orderBy('id','asc')->take($request->quantity)$handle=fopen($filename,'w+');foreach($collection->get()->chunk(500)作为$code){foreach($code作为$code){fputcsv($handle,[$code->code,]);}}}fclose($handle)$收集->更新(['status'=>1])很好,我已经更新了答案。。刚刚意识到take()和chunk()不能一起工作。。隐马尔可夫模型。。