File: //home/armgroup/libs/app/Imports/CategoryProductImport.php
<?php
namespace App\Imports;
use App\Models\Category;
use App\Models\Product;
use DB;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\SkipsEmptyRows;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithValidation;
use Maatwebsite\Excel\Imports\HeadingRowFormatter;
HeadingRowFormatter::default('none');
class CategoryProductImport implements SkipsEmptyRows, ToCollection, WithHeadingRow, WithValidation
{
public function collection(Collection $rows)
{
$data = [];
$categories = Category::pluck('id')->toArray();
foreach ($rows as $row) {
$arr = explode('|', $row['category']);
foreach ($arr as $i => $catID) {
if (in_array($catID, $categories)) {
$data[] = [
'is_main' => count($arr) == ($i + 1),
'category_id' => $catID,
'categorizable_id' => $row['product'],
'categorizable_type' => Product::class,
];
}
}
}
DB::table('categorizables')->insert($data);
}
public function rules(): array
{
return [];
}
public function batchSize(): int
{
return 1000;
}
}