2019/08/26
Laravelを使ってDBにある情報をCSVとしてダウンロードさせる機能を作成したいと思います。
連載で3回に分けてエントリーしていきます。
STEP2.画面作成
STEP3.コントローラー作成
今回はイントロです。
DBの設計
「auth_information」テーブル
と 「profiles」テーブル
を内部結合してCSVダウンロードさせます。
「auth_information」テーブル
認証用の情報が入っている「auth_information」テーブルの構成です。
項目 | カラム名 |
---|---|
ID | id |
メールアドレス(※ログインID) | |
パスワード | 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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。