こんにちは!
とびろぐ管理人のとびうおです!
今回は、Laravel 10で csv export・ダウンロード機能の実装方法について解説します!
今回は、PHP Spreadsheet というのを使って、exportを行っていきます!
Laravelでwebポートフォリオを簡単に作れるようになる本を出しました
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で
新しいオブジェクトを
作成しているイメージだね!
実際にリンクを踏んでみる
続いて、実際に作成したリンクを踏んで、動作確認を行いましょう!
にアクセスすると、csvがダウンロード始まると思います!
↑のようなのがダウンロードされるはずです!(データはダミーデータ)
ダミーデータは
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 ダウンロード機能を作る方法について紹介しました!
csvの操作に関しては、やはりphpSpreadsheetが最強!ということですね!
トビログにはこの他にもたくさんLaravelの記事があります!
ぜひチェックしてみてください↓↓
コメント