Импорт excel в laravel в базу данных

RedDeveloper
29.12.2022 17:41
Импорт excel в laravel в базу данных

Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью Laravel.

Поэтому давайте воспользуемся отличной зависимостью, которая облегчает нашу работу. Если вы хотите узнать больше о зависимости, нажмите на ссылку ниже.

Laravel Excel

Laravel Excel : простая, но элегантная обертка вокруг PhpSpreadsheet с целью упрощения экспорта и импорта.

Сначала требования к использованию библиотеки

  • PHP:^7.2\|^8.0
  • Laravel:^5.8
  • Электронная таблица PHP:^1.21
  • psr/simples-cache:^1.0
  • PHP расширение php_ziphabilitated
  • Расширение PHP php_xmlhabilitated
  • Расширение PHP php_gd2 включено
  • Включено расширение PHP php_iconv
  • Расширение PHP php_simplexmlhabilitated
  • PHP расширение php_xmlreader включить
  • Расширение PHP php_zlib включено

Проверьте расширения в вашем файле 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
2º Шаг - Создание модели и ее миграция чтобы мы могли проверить наш импорт Давайте

Давайте добавим в migrate столбцы, которые мы хотим иметь в базе данных.

Schema::create('animes', function (Blueprint $table) {
            $table->id();
            $table->string('nome');
            $table->integer('episodios');
            $table->timestamps();
        });
Давайте добавим в migrate столбцы которые мы хотим иметь в базе данных

Теперь добавьте в Model Animes поля в $fillable.

protected $fillable = [
        'nome',
        'episodios'
    ];
Теперь добавьте в Model Animes поля в $fillable

Готовая модель и миграция завершены.

Шаг 3 - Настройка базы данных и миграция

В этой статье я буду использовать sqlite в учебных целях, но базу данных вы можете выбрать сами.

Создание базы данных sqlite

Просто создайте файл в папке базы данных и назовите его database.sqlite

Просто создайте файл в папке базы данных и назовите его databasesqlite

В файле .env укажите, какую базу данных вы собираетесь использовать, в данной статье sqlite. Прокомментируйте следующие данные, чтобы избежать проблем с конфигурацией.

DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel_excel
# DB_USERNAME=root
# DB_PASSWORD=
В файле env укажите какую базу данных вы собираетесь использовать в данной статье
php artisan migrate

Теперь просто используйте php artisan migrate в терминале для загрузки базы данных.

Теперь просто используйте php artisan migrate в терминале для загрузки базы данных

Шаг 4 - Импорт файла excel в базу данных.

Naruto, 220,
Naruto, Shippuden 500,
Hunter x Hunter 2011, 148,
One Piece, 999999
Шаг 4 - Импорт файла excel в базу данных

Прежде чем приступить к тестированию, я отключу CSRF, потому что я буду использовать postman для проверки валидности. Для отключения просто перейдите в app > Http > Middleware > VerifyCsrfToken и добавьте кроме "*", не забудьте включить снова при использовании в производстве, это важный механизм безопасности вашего приложения laravel.

Прежде чем приступить к тестированию я отключу CSRF потому что я буду использовать

Создание класса импорта.

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);
Поскольку что-то будет отправлено на обработку будет использован метод POST

Теперь наш контроллер

public function __invoke(Request $request)
{
        $excel = Excel::import(new AnimeImport, $request->file);
        dd(Anime::all());
}
Теперь наш контроллер

В этом шаге мы используем фасад Excel и метод import, первым параметром мы передаем экземпляр нашего класса import, а вторым параметром - файл, который будет импортирован.

Помните, что этот пример приведен только для демонстрации работы импорта, поскольку необходимо проверить Запрос, действительно ли отправляется файл типа excel.

Давайте проведем тест в программе postman

Давайте проведем тест в программе postman

Используйте метод POST и в теле передайте как форму-данные, измените текст на файл и прикрепите файл excel. Поле называлось файлом.

Как мы видим, он успешно импортировал наш файл excel.

Как мы видим он успешно импортировал наш файл excel

Для получения дополнительной информации обязательно обратитесь к официальной документации библиотеки.

До следующего раза, ребята, надеюсь, вам понравилось :)

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.