public function import(Request $request) { $filePath = Session::pull('dataTransferResult.FilesPath'); $createdProductCategories = []; $createdProductLines = []; Excel::selectSheets('Категории')->load($filePath . '/products.xlsx', function ($reader) use($filePath, $createdProductCategories, $createdProductLines) { foreach ($reader->toArray() as $row) { if ($row['nomer'] == null) { continue; } $productCategory = ProductCategory::findOrNew($row['nomer']); if ($row['nomer'] > ProductCategory::max('id')) { $imagePattern = '/img/product-category-' . $row['nomer']; $findResults = File::glob($filePath . $imagePattern . '*'); $imageOriginalPath = $findResults[0]; $imageExt = File::extension($imageOriginalPath); $imagePath = $filePath . $imagePattern . '.' . $imageExt; $newImagePath = 'img/uploads/' . str_random(32) . '.' . $imageExt; File::move($imagePath, public_path() . '/' . $newImagePath); $productCategory->id = $row['nomer']; $productCategory->title = $row['nazvanie']; $productCategory->image = $newImagePath; $createdProductCategories[$row['nomer']] = $productCategory; $productCategory->save(); } } Excel::selectSheets('Линейки продукции')->load($filePath . '/products.xlsx', function ($reader) use($filePath, $createdProductCategories, $createdProductLines) { foreach ($reader->toArray() as $row) { if ($row['nomer'] == null) { continue; } if ($row['nomer'] > ProductLine::max('id')) { $imagePattern = '/img/product-line-' . $row['nomer']; $findResults = File::glob($filePath . $imagePattern . '*'); $imageOriginalPath = $findResults[0]; $imageExt = File::extension($imageOriginalPath); $imagePath = $filePath . $imagePattern . '.' . $imageExt; $newImagePath = 'img/uploads/' . str_random(32) . '.' . $imageExt; File::move($imagePath, public_path() . '/' . $newImagePath); $createdProductLines[$row['nomer']] = ProductLine::create(['id' => $row['nomer'], 'product_category_id' => $row['kategoriya'], 'title' => $row['nazvanie'], 'image' => $newImagePath]); } } Excel::selectSheets('Продукция')->load($filePath . '/products.xlsx', function ($reader) use($filePath, $createdProductCategories, $createdProductLines) { foreach ($reader->toArray() as $row) { if ($row['nomer'] == null) { continue; } $imagePattern = '/img/product-' . $row['nomer']; $findResults = File::glob($filePath . $imagePattern . '*'); $imageOriginalPath = $findResults[0]; $imageExt = File::extension($imageOriginalPath); $imagePath = $filePath . $imagePattern . '.' . $imageExt; $newImagePath = 'img/uploads/' . str_random(32) . '.' . $imageExt; File::move($imagePath, public_path() . '/' . $newImagePath); $productCategoryId = $row['kategoriya'] == null ? null : $row['kategoriya']; $productLineId = $row['lineyka_produktsii'] == null ? null : $row['lineyka_produktsii']; $product = new Product(['title' => $row['nazvanie'], 'image' => $newImagePath, 'rating' => $row['reyting']]); if ($productCategoryId != null) { if (array_key_exists(intval($row['kategoriya']), $createdProductCategories)) { $product->productCategory()->associate($createdProductCategories[$row['kategoriya']]); } else { $product->productCategory()->associate(ProductCategory::find($productCategoryId)); } } if ($productLineId != null) { if (array_key_exists(intval($row['lineyka_produktsii']), $createdProductLines)) { $product->productLine()->associate($createdProductLines[$row['lineyka_produktsii']]); } else { $product->productLine()->associate(ProductLine::find([$row['lineyka_produktsii']])); } } $product->save(); $imagePattern = '/img/product-' . $row['nomer'] . '-color-'; $findResults = File::glob($filePath . $imagePattern . '*'); foreach ($findResults as $findResult) { $newImagePath = 'img/uploads/' . str_random(32) . '.' . $imageExt; $colorCode = substr($findResult, strpos($findResult, 'color') + 6, strpos($findResult, '.') - strpos($findResult, 'color') - 6); File::move($findResult, public_path() . '/' . $newImagePath); $productColor = new ProductColor(['image' => $newImagePath]); $colorNumber = substr($findResult, strpos($findResult, 'color') + 6, strpos($findResult, '.') - strpos($findResult, 'color') - 6); $imagePattern = '/img/product-' . $row['nomer'] . '-image-' . $colorNumber; $findProductColorImageResults = File::glob($filePath . $imagePattern . '*'); $productImagePath = ''; if (count($findProductColorImageResults) != 0) { $imageOriginalPath = $findProductColorImageResults[0]; $productImagePath = 'img/uploads/' . str_random(32) . '.' . $imageExt; File::move($imageOriginalPath, public_path() . '/' . $productImagePath); } $productColor->product_image = $productImagePath; $productColor->product_id = $product->id; $productColor->code = $colorCode; $product->productColors()->save($productColor); } } File::cleanDirectory(public_path() . '/resources/uploads/'); }); }); }); return redirect()->route('admin.dataTransfer.index'); }