我正在开发一个项目,我需要从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);
我正在寻找更新这些数据的更好方法。有什么建议吗?
答案 0 :(得分:2)
在写完文件后,你不能只进行批量更新吗?
$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);