Laravel 10でCSV export・ダウンロード機能の実装方法

こんにちは!

とびろぐ管理人のとびうおです!

今回は、Laravel 10で csv export・ダウンロード機能の実装方法について解説します!

今回は、PHP Spreadsheet というのを使って、exportを行っていきます!

PHP Spreadsheetのインストール

まずは、PHP Spreadsheetをプロジェクトに対してインストールします。

composer を使用して、以下のコマンドを実行してみてください。

composer require phpoffice/phpspreadsheet 

sailを使用している場合↓↓

 ./vendor/bin/sail composer require phpoffice/phpspreadsheet 

ルーティングの設定

続いて、web.phpにcsvエクスポート用のルートを追加します。

use App\Http\Controllers\CsvExportController;

Route::get('/export-csv', [CsvExportController::class, 'export']);

controllerの作成

続いて、controller classの作成を行います。

コマンドライン上で

php artisan make:controller CsvExportController

//sail使用時

./vendor/bin/sail php artisan make:controller CsvExportController

と打ち、CsvExportContrllerを作成しましょう!

controllerの設定

今回はUserのnameとemailをexportするcontrollerを作成します。

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Csv;

class CsvExportController extends Controller
{
    public function export()
    {
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        // ヘッダー行の追加
        $sheet->setCellValue('A1', 'Name');
        $sheet->setCellValue('B1', 'Email');

        // データ行の追加
        $users = User::all();
        $rowNumber = 2;
        foreach ($users as $user) {
            $sheet->setCellValue('A' . $rowNumber, $user->name);
            $sheet->setCellValue('B' . $rowNumber, $user->email);
            $rowNumber++;
        }

        // CSVファイルとして保存
        $writer = new Csv($spreadsheet);
        $fileName = 'users.csv';
        $writer->save($fileName);

        // ダウンロード用のリンクを生成
        return response()->download($fileName)->deleteFileAfterSend(true);
    }
}
とびうお
とびうお

phpSpreadsheetで
新しいオブジェクトを
作成しているイメージだね!

実際にリンクを踏んでみる

続いて、実際に作成したリンクを踏んで、動作確認を行いましょう!

無効なURLです

にアクセスすると、csvがダウンロード始まると思います!

Laravel 10でCSV export・ダウンロード機能の実装方法

↑のようなのがダウンロードされるはずです!(データはダミーデータ)

とびうお
とびうお

ダミーデータは
seederで作ったよ!

ダミーデータの用意

とびうお
とびうお

このセクションは
ダミーデータの集め方なので、
使えるデータが既にあるよ!という方はスキップしてね!

ダミーデータの用意ですが、Laravel10ですと、seederのところがコメントアウトされているので、そちらのコメントアウトをなくせばOKです。

database/seeders/DatabaseSeeder.php を以下のように編集します。

<?php

namespace Database\Seeders;

// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
         \App\Models\User::factory(10)->create();

        // \App\Models\User::factory()->create([
        //     'name' => 'Test User',
        //     'email' => 'test@example.com',
        // ]);
    }
}

上記のように編集し、以下のコマンドを実行します。

php artisan migrate --seed

// sail 
./vendor/bin/sail php artisan migrate --seed
Laravel 10でCSV export・ダウンロード機能の実装方法
info log

上記のようなメッセージが出れば成功です!

おわりに

Laravel 10でcsvのexport ダウンロード機能を作る方法について紹介しました!

csvの操作に関しては、やはりphpSpreadsheetが最強!ということですね!

トビログにはこの他にもたくさんLaravelの記事があります!

ぜひチェックしてみてください↓↓

Laravel
「Laravel」の記事一覧です。
とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

タイトルとURLをコピーしました