I'm using Yii2 to create a tool to manage work load of my team. So everyday i need to import large amount of data (larger than 5k) to db using Excel and the loadtime usually take about 20-30 mins. Is there any way to improve the load time?
Please help me with this.
Here's the code I used:
public function actionImportExcel()
{
$inputFile = 'uploads/importexcel/import.csv';
try{
$inputFileType = \PHPExcel_IOFactory::identify($inputFile);
$objReader = \PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFile);
}catch(Exception $e)
{
die('Error');
}
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
for( $row = 1; $row <= $highestRow; $row++)
{
$rowData = $sheet->rangeToArray('A'.$row.':'.$highestColumn.$row,NULL,TRUE,FALSE);
if($row == 1)
{
continue;
}
$test = $rowData[0][0];
$ext = Sku3d::find()->where(['sku' => $test])->exists();
if($ext){
$one = Sku3d::find()->where(['sku' => $test])->one();
$one->status = $rowData[0][14];
$one->round = $rowData[0][19];
$one->source = $rowData[0][29];
$one->modeler = $rowData[0][30];
if($one->datesubmit == NULL || $one->datesubmit == ""){
$one->save();
}else{
$day = DateTime::createFromFormat('Y-m-d', $one->datesubmit);
$one->monthsubmit=date("Y-m-t", strtotime($one->datesubmit));
$one->save();
}
if($rowData[0][14] == "Approved"){
$one->approvedate = $rowData[0][16];
if($one->approvedate == NULL || $one->approvedate == ""){
$one->save();
}else{
$one->approvemonth=date("Y-m-t", strtotime($one->approvedate));
$one->save();
}
}else{
$one->approvedate = Null;
$one->approvemonth = Null;
}
$one->save();
// print_r($one->getErrors());
// die;
}
else{
}
}
}
Thank you!