LaravelでCSVダウンロード機能を実装する

/ WEB制作・開発

LaravelでCSVファイル形式でダウンロードする機能を紹介します。データベースに保存されているすべてのデータをCSVと、キーワードで絞り込んだデータをCSVファイル形式でダウンロード出来る機能を実装します。

本編では、ソースコードの紹介だけでなく、新しくプロジェクトを作成して進めます。ソースコードだけ必要な方はRoutesから読み進めていって下さい。

なお、開発環境は紹介してませんので、開発環境をご用意ください。

 

   

 

 

完成イメージ

まずは完成イメージを紹介します。

 

Sampleデータベースの一覧表示画面

サンプルテーブルのデータを一覧で表示しています。絞り込み機能でSample1、Sample2、Sample3のいずれかにテキストでHitした記事を表示出来るようになっています。
※データはダミーです。

 

CSV形式でダウンロードしたファイル

Export to CSVをクリックするとCSVファイルが出力されます。

 

 

 

 

環境

LaravelでLAMP環境を構築しています。

Laravel: 5.7
PHP: 7.2.13
Mysql: 5.7.24
CentOS Linux: 7.4.1708
Apache: 2.4.6
Vagrant: 2.2.2

 

 

Laravelのインストール

それでは早速進めていきましょう。まずは新規プロジェクトを作成します。

Composerをダウンロード

 

export名称でプロジェクトを作成

 

 

データベースを作成

データベース名称はexportでデータベースを作成します。

 

Vagrantにsshでログインして、mysql -u root -pでmysqlにログインしてから以下のコマンドを実行します。
※この記事でのコマンドの実行は、全てvagrantでsshしてディレクトリまで移動した状態で実行してください。

 

 

Samplesテーブルの作成

次にSamplesテーブルを作成します。

 

migrationファイルの作成

migrationファイルを作成します。

 

migrationファイルの変更

作成したらファイルを以下のようにします。ファイルはdatabase/migrations/2019_02_25_111508_create_samples_table.phpです。
※migrationファイルは日付や時間によってファイル名が変わります。

 

Sampleテーブルのデータ構成

id(Auto Increments)
sample1(Text形式)
sample2(Text形式)
sample3(Text形式)
created_at(Laravelが持つtimestamp機能)
updated_at(Laravelが持つtimestamp機能)

 

 

migrationを実行します。

 

 

 

 

Seederを使ってテストデータの登録

Seederを使ってテスト用のデータを登録します。

 

seederファイルを作成

以下のコマンドを実行して、SamplesTableSeederを作成してください。

 

seederファイルの編集

作成したらファイルを以下のようにします。ファイルはdatabase/seeds/SamplesTableSeeder.phpです。6つのカラムを作成しています。

 

DatabaseSeederを編集

seederを実行させるためにDatabaseSeederを以下のようにします。ファイルはdatabase/seeds/DatabaseSeeder.phpです。

 

Seederの実行

 

以上でテストデータの登録が完了です。

 

 

Routes

routeを設定します。

最後の2行を追加します。

Route::get(‘/sample’, ‘SampleController@index’)->name(‘index.sample’);
Route::get(‘/sample/export{keyword?}’, ‘SampleController@export’)->name(‘export.sample’);

 

 

View

続いて、Viewファイルを作成します。Viewファイルはlayouts/app.blade.phpをベースファイルとし、ベースファイルをextendsして/sample/index.blade.phpを使います。

 

レイアウトを作成

レイアウトを作成します。ファイルはresources/views/layouts/app.blade.phpです。
layoutsフォルダを作成してからapp.blade.phpファイルを作成してください。

 

Viewを作成

viewファイルを作成します。ファイルはresources/views/sample/index.blade.phpです。
sampleディレクトリを作成してからindex.blade.phpを作成してください。

18行目の{{ route(‘export.sample’, [‘keyword’ => $keyword]) }}でボタンを押すと、/sample/exportへリンクするようにしています。Keywordを渡しているのは、CSV出力する際に、キーワードで絞り込んでリストのみを出力するためです。

 

 

Model

モデルを作成します。

 

以下のコマンドを実行してSampleモデルファイルを作成してください。

 

作成したファイルを以下に変更します。ファイルはapp/Sample.phpです。

キーワードで検索された場合に、sample1、sample2、sample3のいずれかにテキストが含まれるデータを取得します。これにより絞り込み機能を実装しています。

 

 

Controller

 

以下のコマンドを実行して、SampleControllerを作成してください。

 

作成したファイルを以下に変更します。ファイルはapp/Http/Controllers/SampleController.phpです。

 

 

以上で完了となります。もし不明点などがあればコメント欄からお願いします。

SNS SHARE

LEAVE A REPLY