Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью Laravel.
Поэтому давайте воспользуемся отличной зависимостью, которая облегчает нашу работу. Если вы хотите узнать больше о зависимости, нажмите на ссылку ниже.
Laravel Excel : простая, но элегантная обертка вокруг PhpSpreadsheet с целью упрощения экспорта и импорта.
Сначала требования к использованию библиотеки
Проверьте расширения в вашем файле php.ini
Шаг 1 - Установка зависимости.
composer require maatwebsite/excel
Если есть ошибка в composer с Laravel 9, мы можем использовать:
composer require psr/simple-cache:^1.0 maatwebsite/excel
В моем случае возникла ошибка.
Теперь зависимость была установлена правильно.
2º Шаг - Создание модели и ее миграция, чтобы мы могли проверить наш импорт. Давайте поставим "-m" для создания миграции и "-c" для создания контроллера вместе с моделью.
php artisan make:model Anime -m -c
Давайте добавим в migrate столбцы, которые мы хотим иметь в базе данных.
Schema::create('animes', function (Blueprint $table) { $table->id(); $table->string('nome'); $table->integer('episodios'); $table->timestamps(); });
Теперь добавьте в Model Animes поля в $fillable.
protected $fillable = [ 'nome', 'episodios' ];
Готовая модель и миграция завершены.
Шаг 3 - Настройка базы данных и миграция
В этой статье я буду использовать sqlite в учебных целях, но базу данных вы можете выбрать сами.
Создание базы данных sqlite
Просто создайте файл в папке базы данных и назовите его database.sqlite
В файле .env укажите, какую базу данных вы собираетесь использовать, в данной статье sqlite. Прокомментируйте следующие данные, чтобы избежать проблем с конфигурацией.
DB_CONNECTION=sqlite # DB_HOST=127.0.0.1 # DB_PORT=3306 # DB_DATABASE=laravel_excel # DB_USERNAME=root # DB_PASSWORD=
php artisan migrate
Теперь просто используйте php artisan migrate в терминале для загрузки базы данных.
Шаг 4 - Импорт файла excel в базу данных.
Naruto, 220, Naruto, Shippuden 500, Hunter x Hunter 2011, 148, One Piece, 999999
Прежде чем приступить к тестированию, я отключу CSRF, потому что я буду использовать postman для проверки валидности. Для отключения просто перейдите в app > Http > Middleware > VerifyCsrfToken и добавьте кроме "*", не забудьте включить снова при использовании в производстве, это важный механизм безопасности вашего приложения laravel.
Создание класса импорта.
php artisan make:import AnimeImport
По умолчанию класс импорта расширяет toCollection, но поскольку мы будем использовать eloquent, я изменю класс, чтобы он расширял toModel.
Или, если вы предпочитаете, вы можете использовать команду, которая создает указание модели
php artisan make:import AnimeImport --model=Anime
<?php namespace App\Imports; use Maatwebsite\Excel\Concerns\ToModel; class AnimeImport implements ToModel { public function model(array $row) { return new Anime([ 'nome' => $row[0], 'episodios' => $row[1] ]); } }
В классе импорта определим Модель, которая будет получать данные и присваивать значения своим ключам.
Поскольку у нас есть только название аниме и количество его эпизодов, мы определяем только название и эпизод и присваиваем их ряду[0] и ряду[1], если бы данных было больше, это был бы ряд[2], ряд[3] и т.д.
Создание маршрута и указание на наш контроллер
Поскольку что-то будет отправлено на обработку, будет использован метод POST
Route::post('import', \App\Http\Controllers\AnimeController::class);
Теперь наш контроллер
public function __invoke(Request $request) { $excel = Excel::import(new AnimeImport, $request->file); dd(Anime::all()); }
В этом шаге мы используем фасад Excel и метод import, первым параметром мы передаем экземпляр нашего класса import, а вторым параметром - файл, который будет импортирован.
Помните, что этот пример приведен только для демонстрации работы импорта, поскольку необходимо проверить Запрос, действительно ли отправляется файл типа excel.
Давайте проведем тест в программе postman
Используйте метод POST и в теле передайте как форму-данные, измените текст на файл и прикрепите файл excel. Поле называлось файлом.
Как мы видим, он успешно импортировал наш файл excel.
Для получения дополнительной информации обязательно обратитесь к официальной документации библиотеки.
До следующего раза, ребята, надеюсь, вам понравилось :)
20.08.2023 18:21
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".
20.08.2023 17:46
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
19.08.2023 18:39
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.
19.08.2023 17:22
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!
18.08.2023 20:33
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.
14.08.2023 14:49
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.