追記:
hentaimanさんからご教示いただいたURLから,csvファイルを取得するためのツールをダウンロードし,使ってみたところ,私がやりたいことが実現できました。
ただ,現在,多くの方がこれ以外で,別の解決策を提示してくださっているので,それらも検証してみようかと思います。その結果次第で,ベストアンサーを決めようかと思います。
お待たせしてしまうかもしれませんが,しばらくお待ちくださいますようよろしくお願いいたします。
質問
途中までコードを書いていて,いろいろ試した結果何をどうすればよいのか分からなくなってしまいました。
下記に,コードの一部をまとめますので,どうしたらcsvファイルをダウンロードできるようになるかご教示いただけると幸いです。
web
1Route::get('users/csv', 'csvController@download'); // <-これ 2Route::resource('users', 'UserController');
csvController
1 2class csvController extends Controller 3{ 4 //2つのテーブル(tbl_userとtbl_way)を結合し,tbl_userのidとname,tbl_wayのway_nameを 5 //csvファイルで取得する。 6 public function download( Request $request ) 7 { 8 //テーブルの結合 9 $users = DB::table('tbl_users') 10 ->leftJoin('tbl_ways', 'tbl_users.way_id', '=', 'tbl_ways.id') 11 ->get(); 12 13 $response = new StreamedResponse (function() use ($request){ 14 15 //ファイルを開く 16 $stream = fopen('php://output', 'w'); 17 18 // 文字化け回避 19 stream_filter_prepend($stream,'convert.iconv.utf-8/cp932//TRANSLIT'); 20 21 // タイトルを追加 22 fputcsv($stream, ['id', '氏名', '移動手段']); 23 24 foreach ($users as $user) { 25 fputcsv($stream, [$user->id, $user->name, $user->way_name]); 26 }; 27 28 //ファイルを閉じる 29 fclose($stream); 30 }); 31 32 //ここから下のコードについては何かよくわかっていない。 33 //特に何をreturnすればよいか分からない。 34 $response->headers->set('Content-Type', 'application/octet-stream'); 35 $response->headers->set('Content-Disposition', 36 'attachment; filename="ファイル名.csv"'); 37 return view('users/index'); 38 } 39} 40
index.blade.phpでボタンを設置し,クリックした際にcsvファイルがダウンロードできるようにします。
そのとき,現在いるぺージからは遷移しないようにする予定でした。
index
1<form action="users/csv" method="get"> 2 <input type="submit" value="csv"> 3</form>
補足説明
テーブルは下記の2つ。tbl_wayがtbl_userのマスターテーブルで,idとway_idが紐づいています。
tbl_user
id | name | way_id |
---|---|---|
1 | taro | 1 |
2 | yamada | 2 |
3 | ziro | 1 |
tbl_way
id | way_name |
---|---|
1 | train |
2 | walk |
なお,csvファイルでダウンロードした際,下記のような結果を期待しております。
id | 氏名 | 移動手段 |
---|---|---|
1 | taro | train |
2 | yamada | walk |
3 | ziro | train |
以上です。
もし,どなたか分かれば,ご教示いただけると幸いです。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/27 09:13
2019/06/27 14:48
2019/07/02 06:49 編集