public function uploadInformProduct() { // проверяем существует есть ли файл $filename = \Yii::$app->basePath . '/web/files/upload.xlsx'; $chunkSize = 500; //размер считываемых строк за раз //начинаем читать со строки 2, в PHPExcel первая строка имеет индекс 1, и как правило это строка заголовков $startRow = 2; $exit = false; //флаг выхода $empty_value = 0; //счетчик пустых знаений $objReader = \PHPExcel_IOFactory::createReaderForFile($filename); $objReader->setReadDataOnly(true); $chunkFilter = new chunkReadFilter(); $objReader->setReadFilter($chunkFilter); /** Tell the Reader that we want to use the Read Filter that we've Instantiated **/ $objReader->setReadFilter($chunkFilter); //внешний цикл, пока файл не кончится while (!$exit) { $chunkFilter->setRows($startRow, $chunkSize); //устанавливаем знаечние фильтра $objPHPExcel = $objReader->load($filename); //открываем файл $objPHPExcel->setActiveSheetIndex(0); //устанавливаем индекс активной страницы $objWorksheet = $objPHPExcel->getActiveSheet(); //делаем активной нужную страницу //внутренний цикл по строкам for ($i = $startRow; $i < $startRow + $chunkSize; $i++) { //получаем первое знаение в строке $value = $objWorksheet->getCellByColumnAndRow(0, $i)->getValue(); if (!empty($value)) { if (!PodruzkaProduct::findOne(['article' => $value])) { $product = new PodruzkaProduct(); } else { $product = PodruzkaProduct::findOne(['article' => $value]); } $product->article = trim(htmlspecialchars($objWorksheet->getCellByColumnAndRow(0, $i)->getValue())); $product->title = (string) $objWorksheet->getCellByColumnAndRow(1, $i)->getValue(); $product->arrival = (string) $objWorksheet->getCellByColumnAndRow(2, $i)->getValue(); $product->group = (string) $objWorksheet->getCellByColumnAndRow(3, $i)->getValue(); $product->category = (string) $objWorksheet->getCellByColumnAndRow(4, $i)->getValue(); $product->sub_category = (string) $objWorksheet->getCellByColumnAndRow(5, $i)->getValue(); $product->detail = (string) $objWorksheet->getCellByColumnAndRow(6, $i)->getValue(); $product->brand = (string) $objWorksheet->getCellByColumnAndRow(7, $i)->getValue(); $product->sub_brand = (string) $objWorksheet->getCellByColumnAndRow(8, $i)->getValue(); $product->line = (string) $objWorksheet->getCellByColumnAndRow(9, $i)->getValue(); $product->price = (string) $objWorksheet->getCellByColumnAndRow(10, $i)->getValue(); $product->ma_price = (string) $objWorksheet->getCellByColumnAndRow(11, $i)->getValue(); $product->save(); } $productPrice = new PodruzkaPrice(); $productPrice->article = $objWorksheet->getCellByColumnAndRow(0, $i)->getValue(); $productPrice->price = (string) $objWorksheet->getCellByColumnAndRow(10, $i)->getValue(); $productPrice->ma_price = (string) $objWorksheet->getCellByColumnAndRow(11, $i)->getValue(); if (!$productPrice->save()) { //TODO ? } //проверяем значение на пустоту if (empty($value)) { $empty_value++; } //после 1 пустого значения, завершаем обработку файла, думая, что это конец if ($empty_value == 1) { $exit = true; continue; } } $objPHPExcel->disconnectWorksheets(); //чистим unset($objPHPExcel); //память $startRow += $chunkSize; //переходим на следующий шаг цикла, увеличивая строку, с которой будем читать файл } unlink($filename); }
public function actionLpodr() { $entity = new LetualProduct(); $offset = 0; do { $products = $entity->getEntity($offset, 20); if (!empty($products)) { foreach ($products as $product) { if (empty($product->letu_id)) { $query = new Query(); $str = ''; $rows = $query->from('pproduct')->match(new Expression(':match', ['match' => '@(description) ' . \Yii::$app->sphinx->escapeMatchValue($product->title)]))->all(); foreach ($rows as $row) { if (!empty($row['id'])) { // проставляем идентификатор $str = $row['id']; break; } } // обновляем таблицу podruzka_product if (!empty($str)) { $productEntity = PodruzkaProduct::findOne(['id' => $str]); if ($productEntity instanceof PodruzkaProduct) { if (empty($productEntity->letu_id)) { $productEntity->letu_id = (string) $product->id; $productEntity->save(); } } } } } $z = 1; $offset += 20; unset($productEntity); unset($query); } else { $z = 0; } } while ($z > 0); return 0; }
/** * Finds the PodruzkaProduct model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * * @param integer $id * * @return PodruzkaProduct the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = PodruzkaProduct::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } }