Импорт 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

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

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

Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js

21.03.2023 12:23

Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из самых популярных фреймворков для веб-разработки сегодня является React.js. Если вы начинающий веб-разработчик и хотите узнать больше о React.js, это...

Разница между Angular и React
Разница между Angular и React

21.03.2023 07:56

React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые делают их подходящими для различных проектов веб-разработки.

Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit

20.03.2023 14:01

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

Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра

20.03.2023 12:24

Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие действия:

ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023

20.03.2023 11:15

О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц. HTML обеспечивает структуру страницы CSS (визуальное и звуковое) оформление для различных устройств. Наряду с графикой и сценариями HTML и CSS являются...

Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular

20.03.2023 08:46

Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?