Example #1
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getPodruzkaPrices()
 {
     return $this->hasMany(PodruzkaPrice::className(), ['article' => 'article']);
 }
Example #2
0
 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);
 }