前提・実現したいこと
バッチ処理でDBの取得結果をCSVファイルとしてダウンロードしたいです。
現状下記記載のコードにて、/csv へアクセスすることでダウンロードすることは可能になっているのですが、
バッチ処理で決まった時間にCSVファイルをダウンロードするようにしたいです。
動作確認としてはまだ定時処理だと待ち時間が出てしまうので、
php
1php artisan schedule:run
にてしています。
ご教授お願いいたします。
該当のソースコード
php
1<?php 2 3namespace App\Http\; 4 5use App\Model\Corporation; 6use Carbon\Carbon; 7 8class CsvController 9{ 10 //バッチ処理用 11 public function __invoke($tableName = 'corporations') 12 //URL用 13// public function csvExport($tableName = 'corporations') 14 { 15 if ($tableName === 'corporations') { 16 $lists = Corporation::SelectColumns()->get(); 17 } 18 19 $filename = Carbon::today()->format('Ymd') . '_' . $tableName . '.csv'; 20 $file = $this->createCsv($filename); 21 22 $this->write($file, config('const.Csv.' . strtoupper($tableName) . '_COLUMNS.JAP')); 23 24 // 値を入れる 25 foreach ($lists as $list) { 26 $csv = []; 27 foreach (config('const.Csv.' . strtoupper($tableName) . '_COLUMNS.ENG') as $col) { 28 $csv[] = $list->$col; 29 } 30 $this->write($file, $csv); 31 } 32 33 $response = file_get_contents($file); 34 35 // ストリームに入れたら実ファイルは削除 36 $this->purge($filename); 37 38 39 // return response::download($response,$filename); 40 41 42 // ここをうまく変えればいける? 43 return response($response, 200) 44 ->header('Content-Type', 'text/csv') 45 ->header('Content-Disposition', 'attachment; filename=' . $filename); 46 } 47 48 /** 49 * CSVファイル作成 50 * 51 * @param $filename 52 * @return string 53 */ 54 public function createCsv($filename) 55 { 56 $csv_file_path = storage_path('app/' . $filename); 57 $result = fopen($csv_file_path, 'w'); 58 if ($result === FALSE) { 59 throw new Exception('ファイルの書き込みに失敗しました。'); 60 } else { 61 fwrite($result, pack('C*', 0xEF, 0xBB, 0xBF)); 62 } 63 fclose($result); 64 65 return $csv_file_path; 66 } 67 68 /** 69 * CSVファイルに書き出す 70 * 71 * @param $filepath 72 * @param $records 73 */ 74 public function write($filepath, $records) 75 { 76 $result = fopen($filepath, 'a'); 77 78 fputcsv($result, $records); 79 80 fclose($result); 81 } 82 83 /** 84 * ストリームからCSVファイルの削除 85 * 86 * @param $filename 87 * @return bool 88 */ 89 public static function purge($filename) 90 { 91 return unlink(storage_path('app/' . $filename)); 92 } 93} 94
試したこと
storageに格納したものをダウンロードしようとしてうまく行かず、バッチでのCSVダウンロードの記事が見つからず、
こ教授願います、、
補足情報(FW/ツールのバージョンなど)
laravel 7.0
php 7.2.5
mac os
vagrant
sent os
constはカラムの物理名、論理名の配列です
あなたの回答
tips
プレビュー