Импорт CSV-файла в Laravel: встроенная функциональность и пакет Laravel Excel

Чтобы импортировать файл CSV в Laravel, вы можете использовать несколько методов. Вот несколько вариантов:

  1. Использование встроенной функции импорта CSV в Laravel:
    Laravel предоставляет удобный способ импорта файлов CSV с помощью класса Illuminate\Support\Collection. Вы можете выполнить следующие действия:

    а. Сначала убедитесь, что у вас установлен пакет illuminate/support, выполнив следующую команду:

      composer require illuminate/support

    б. Затем создайте новый класс или метод для обработки импорта CSV. Например, вы можете создать CsvImportControllerс помощью метода importCsv:

      <?php
      namespace App\Http\Controllers;
      use Illuminate\Http\Request;
      use Illuminate\Support\Collection;
      use Illuminate\Support\Facades\Storage;
      class CsvImportController extends Controller
      {
          public function importCsv(Request $request)
          {
              $path = $request->file('csv_file')->getRealPath();
              $data = collect(array_map('str_getcsv', file($path)));
              // Process and save the data as per your requirements
              // For example, you can loop through the $data collection and save each row to the database
              // or perform any other necessary operations.
          }
      }

    в. В файле маршрута (web.phpили api.php) определите маршрут, указывающий на метод importCsv:

      Route::post('/csv-import', 'CsvImportController@importCsv');

    д. Наконец, создайте форму с полем ввода файла для загрузки файла CSV. Действие формы должно указывать на определенный маршрут.

      <form action="/csv-import" method="POST" enctype="multipart/form-data">
          @csrf
          <input type="file" name="csv_file">
          <button type="submit">Import</button>
      </form>

    При описанной выше настройке при отправке формы будет вызван метод importCsv, и вы сможете получить доступ к загруженным данным CSV.

  2. Использование пакета Laravel Excel.
    Другим популярным вариантом является использование пакета Laravel Excel, который предоставляет более расширенные функции для импорта и экспорта файлов Excel и CSV. Чтобы использовать этот пакет, вы можете выполнить следующие действия:

    а. Установите пакет с помощью Composer:

      composer require maatwebsite/excel

    б. Создайте новый класс для обработки импорта CSV. Например, вы можете создать CsvImportControllerс помощью метода importCsv:

      <?php
      namespace App\Http\Controllers;
      use Illuminate\Http\Request;
      use Maatwebsite\Excel\Facades\Excel;
      use App\Imports\CsvImport;
      class CsvImportController extends Controller
      {
          public function importCsv(Request $request)
          {
              $path = $request->file('csv_file')->getRealPath();
              Excel::import(new CsvImport, $path);
              // The CsvImport class should implement the `WithHeadingRow` interface
              // and define the `collection` method to handle the import logic.
              // You can customize the import behavior as per your requirements.
          }
      }

    в. Создайте новый класс для обработки логики импорта. Например, вы можете создать класс CsvImport:

      <?php
      namespace App\Imports;
      use Illuminate\Support\Collection;
      use Maatwebsite\Excel\Concerns\ToCollection;
      use Maatwebsite\Excel\Concerns\WithHeadingRow;
      class CsvImport implements ToCollection, WithHeadingRow
      {
          public function collection(Collection $rows)
          {
              // Process and save the data as per your requirements
              // For example, you can loop through the $rows collection and save each row to the database
              // or perform any other necessary operations.
          }
      }

    д. Определите маршрут и создайте форму, аналогичную первому методу.

Это два распространенных метода импорта файлов CSV в Laravel. Вы можете выбрать тот, который лучше всего соответствует вашим потребностям.