Задать вопрос
Encoderast
@Encoderast
frontend пытается что-то делать в backend

Yii2 — массовая загрузка / выгрузка / обновление в БД?

Валар Моргулис!

Ищу какой нибудь гайд по массовому добавлению товаров (допустим у нас 1000 штук) через excel файл. Информация есть что через ActivRecord само собой разумеется это делается, а как именно не нашел

И также ищу гайды по интеграции с 1C, если есть какие нибудь, чтоб прям для чайников - буду рад

Подскажите зеленому, я всего как 2 месяца на php пишу))
  • Вопрос задан
  • 1405 просмотров
Подписаться 1 Простой 3 комментария
Ответ пользователя Дмитрий К ответам на вопрос (2)
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Для того, чтобы из exel файла добавить товары в базу, как уже подсказали, Вам нужно расширение PHPExcel.
При помощи этого расширения Вы считываете данные с файла, заполняете нужную модель и сохраняете данные в базу.
Приблизительно так:
class ProductsImportController extends Controller
{
    public function actionImport()
    {
        $file = (object)Yii::$app->request->post('FlightsImport'); // получаете имя файла

        $fileInput = Yii::getAlias('@webroot') . '/uploads/import_file/' . substr(strrchr($file->importfile, '/'), 1); // полный путь к файлу
        /* читаете файл */
        $objInputType = \PHPExcel_IOFactory::identify($fileInput);
        $objReader = \PHPExcel_IOFactory::createReader($objInputType);
        $objExcel = $objReader->load($fileInput);

        $sheet = $objExcel->getSheet(0);
        $highestRow = $sheet->getHighestRow();
        $highestColumn = $sheet->getHighestColumn();

        for($row = 1; $row <= $highestRow; $row++){
            if($row == 1) continue;
            $rowData = $sheet->rangeToArray('A'.$row.':'.$highestColumn.$row, null, true, false);
            // print_r($rowData); 
            // объект модели, которую надо заполнить
            $flights = new FlightsImport();
            // заполняете нужные атрибуты
           $flights->title = FlightsImport::findAirlineId($rowData[0][3]); // название компании
            $flights->save(false);
        }
    }
}

Чтобы понять, что это за массив $rowData[0][3] сделайте в методе print_r($rowData) и увидите, что и какие данные Вы получили из файла.
Ответ написан
Комментировать