File: //home/armgroup/libs/app/Imports/ProductsImport2.php
<?php
namespace App\Imports;
use App\Models\Product;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Concerns\SkipsEmptyRows;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Events\AfterImport;
use Maatwebsite\Excel\Events\ImportFailed;
use Maatwebsite\Excel\Imports\HeadingRowFormatter;
use Maatwebsite\Excel\Validators\ValidationException;
HeadingRowFormatter::default('none');
class ProductsImport2 implements ShouldQueue, SkipsEmptyRows, ToCollection, WithChunkReading, WithEvents, WithHeadingRow
{
public function collection(Collection $rows)
{
$products = [];
foreach ($rows as $row) {
$products[] = [
'id' => $row['ID'],
'user_id' => 1,
'name' => $row['post_title'],
'slug' => $row['post_name'],
'weight' => (int) $row['weight'],
'price' => (int) $row['sale_price'],
'stock' => (int) $row['stock'],
'description' => $row['post_content'],
'status' => $row['post_status'] == 'publish',
'image' => $row['images'] ? 'storage/photos/shares'.str_replace('https://havin.com', '', explode(' ', $row['images'])[0]) : 'images/defaults/default.jpg',
'created_at' => now(),
'updated_at' => now(),
];
}
Product::insert($products);
}
public function chunkSize(): int
{
return 50;
}
public function registerEvents(): array
{
return [
ImportFailed::class => function (ImportFailed $event) {
if (get_class($event->getException()) == ValidationException::class) {
$errors = [];
foreach ($event->getException()->failures() as $failure) {
$errors = array_merge($errors, $failure->toArray());
}
Log::warning($errors);
} else {
Log::error($event->getException()->getMessage());
}
},
AfterImport::class => function (AfterImport $event) {
Log::info('اکسل محصولات با موفقیت ایمپورت شد.');
},
];
}
}