Skip to content

vitkonovaluck/test_import_excel_in_laravel

Repository files navigation

Імпорт прайсу з Excel (Laravel)

Тестове завдання на Laravel для імпорту товарів з файлів Excel/CSV у базу даних. Передбачено:

  • веб-інтерфейс завантаження за адресою /price-import;
  • перевірку та пропуск дублікатів (за назвою та кодом моделі);
  • автоматичне створення рубрик та категорій за даними з файлу;
  • пакетну обробку великих файлів та коротку статистику після імпорту.

Вимоги

  • PHP 8.2+
  • Composer 2+
  • MySQL/MariaDB (локально зручно через XAMPP)
  • Розширення PHP: zip, xml, mbstring (потрібні для роботи з Excel)

Бібліотека для імпорту: maatwebsite/excel (PhpSpreadsheet).

Встановлення (Windows/XAMPP)

  1. Клонувати репозиторій
  2. Перейти в теку проєкту: cd D:\xampp\htdocs\test_import_excel_in_laravel
  3. Встановити залежності: composer install
  4. Створити файл налаштувань: copy .env.example .env
  5. Згенерувати APP_KEY: php artisan key:generate
  6. Створити БД у phpMyAdmin (наприклад, excel_import) і вказати доступи в .env:
    • DB_CONNECTION=mysql
    • DB_HOST=127.0.0.1
    • DB_PORT=3306
    • DB_DATABASE=excel_import
    • DB_USERNAME=root
    • DB_PASSWORD=
  7. Виконати міграції: php artisan migrate
  8. Запустити локальний сервер: php artisan serve
  9. Відкрити у браузері: http://127.0.0.1:8000/price-import

За потреби, якщо запускаєте через Apache XAMPP, налаштуйте VirtualHost або відкрийте http://localhost/test_import_excel_in_laravel/price-import

Налаштування розміру файлів

Обмеження на розмір завантаження визначаються PHP директивами upload_max_filesize, post_max_size та memory_limit. На сторінці імпорту відображається динамічно розрахований ліміт на основі цих значень (див. App\Rules\MaxFileSize). За замовчуванням правило не дозволяє завантажувати файл більший, ніж найменше з цих значень (для memory_limit використовується чверть значення).

Якщо потрібно збільшити ліміт, змініть значення у php.ini (XAMPP: D:\xampp\php\php.ini) і перезапустіть Apache:

  • upload_max_filesize=64M
  • post_max_size=64M
  • memory_limit=512M

Як користуватися (Веб-інтерфейс)

  1. Перейдіть на сторінку імпорту: /price-import
  2. Виберіть файл .xlsx/.xls/.csv у полі "Виберіть Excel файл"
  3. Натисніть "Імпортувати"
  4. Після завершення побачите підсумкове повідомлення із статистикою:
    • скільки записів імпортовано/пропущено;
    • загальна кількість оброблених рядків;
    • час виконання та швидкість обробки;
    • список перших 10 помилок (якщо вони виникли).

Маршрути:

  • GET /price-import — форма завантаження
  • POST /price-import — обробка імпорту

Важливо:

  • Назва товару (col 4) та Код моделі (col 5) — обовʼязкові. Рядки без них пропускаються.
  • Дублікати в межах одного файлу та записи, що вже існують у БД, пропускаються.
  • Рубрики/категорії створюються автоматично. Якщо рубрики відсутні, використовується "Без рубрики".

Що зберігається у БД

Таблиця products (створюється міграцією) містить поля:

  • category_id (звʼязок із categories)
  • name, description, manufacturer
  • model_code (унікальний)
  • price (decimal 10,2)
  • warranty, availability (boolean)

Також використовуються таблиці rubrics і categories для ієрархії рубрик/категорій.

Продуктивність

  • Імпорт здійснюється пакетами по 1500 записів (batchSize).
  • Читання Excel відбувається чанками по 3000 рядків (chunkSize).
  • Для зменшення витрат памʼяті використовується кешування існуючих значень і збір сміття.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages