CSVエキスポートの作成(イントロ)

2019/08/26

Laravelを使ってDBにある情報をCSVとしてダウンロードさせる機能を作成したいと思います。

連載で3回に分けてエントリーしていきます。

STEP1.マイグレーション/モデル/シーダー作成
STEP2.画面作成
STEP3.コントローラー作成

今回はイントロです。

 

DBの設計

「auth_information」テーブル「profiles」テーブル を内部結合してCSVダウンロードさせます。

 

「auth_information」テーブル

認証用の情報が入っている「auth_information」テーブルの構成です。

項目 カラム名
ID id
メールアドレス(※ログインID) email
パスワード password
リメンバートークン remember_token
作成日 created_at
更新日 updated_at

 

「profiles」テーブル

ユーザーの情報が入っている「profiles」テーブル

項目 カラム名
ID id
認証用ID(※auth_informationのidと紐づけ) authinformation_id
名前 name
住所 address
生年月日 birthdate
電話番号 tel
メッセージ msg
作成日 created_at
更新日 updated_at

 

事前知識

response::make

下記のように書くことでCSVをダウンロードすることができます。


return response()->make($csv, 200, $headers);

 

第一引数の $csv は出力するデータです。

第三引数のヘッダーはCSVダウンロードする場合に、以下のように記述します。


$headers = array(
    'Content-Type' => 'text/csv',
    'Content-Disposition' => 'attachment; filename="demo.csv"',
);

 

fputcsv

PHPで配列からCSVファイルに出力するのに便利な関数として、「fputcsv関数」があります。

以下のように使います。


fputcsv($file_handler, $array);

 

$file_handler とは fopen 関数で正常にオープンされた、有効なファイルポインタを指します。

PHPで一時的なファイルポインタを扱う場合、以下のように記述します。


// メモリ上に領域を確保し、2MB を超えたら自動削除される一時ファイルを作る
$file_handler = fopen('php://temp', 'r+b');

 

fputcsv関数の第二引数である $array はCSVファイルへ書き込む配列を指定します。

fputcsv関数の返り値は、書き込まれたバイト数をint型で返します。

ポイント
メモリが解放される・一時ファイルが削除されるタイミングは?

fclose($fp) のようにしてファイルポインタを閉じたとき。
・スクリプトが終了したとき。

 
今回はイントロまで

以上です。

 
なお、PHP のファイルシステム関数についてもっと理解を深めたい方は 独習PHP 第3版 をお勧めします。

ポイント
ファイルシステム関数の掲載ページの箇所

5.5.1 テキストファイルへの書き込み
5.5.2 ファイルを開く - fopen/fclose関数
5.5.3 fopen 関数でのエラー処理 - エラー制御演算子
5.5.4 ファイルへの書き込み - fwrite関数
5.5.5 ファイルのロック - flock関数
5.5.6 タブ区切りテキストの読み込み - fgetcsv関数
5.5.7 タブ区切りテキストの読み込み(別解) - fgets/file関数
5.5.8 ファイルシステム関数の設定パラメータ

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-チュートリアル, 中級