前提・実現したいこと
Laravelのapiを使って、URLパラメータの値を反映したクエリをデータベースに投げて
CSVでダウンロードする機能を作ってます。
参考文献:
http://toyo.hatenablog.jp/entry/2017/04/16/115309
発生している問題・エラーメッセージ
StreamedResponse内でエラーが起きてるためか、
ダウンロードのページで
「このサイトにアクセスできません」
と出力されます。
該当のソースコード
リンクにはURLパラメータを付与して、
モデルファイルでクエリビルダを使用してデータを受け取ります。
php
1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Model; 6use Illuminate\Support\Facades\DB; 7use Symfony\Component\HttpFoundation\StreamedResponse; 8 9class CSV extends Model 10{ 11 protected $table = 'テーブル名'; 12 13 public function getCsv($request){ 14 15 $md=DB::table($this -> table); 16 // クエリビルダには $requestの値(URLパラメータ)を使用します 17 $md=$md->クエリビルダ; 18 19 $data = $md->get(); 20 21 $csv[] = array('カラム名'); 22 foreach ($data as $key => $value) { 23 $csv[] = array(カラムごとにアロー演算子で代入); 24 } 25 26 // print_r($csv); 27 // exit(); 28 29 return new StreamedResponse( 30 function(){ 31 32 $stream = fopen('php://output', 'w'); 33 foreach($csv as $line){ 34 fputcsv($stream, $line); 35 } 36 fclose($stream); 37 }, 38 200, 39 [ 40 'Content-Type' => 'text/csv', 41 'Content-Disposition' => 'attachment; filename="test.csv"', 42 ] 43 ); 44 } 45}
試したこと
ソースのコメントに書いてある、
// print_r($csv);
// exit();
を実行したところ、値は取れてました。
また、参考文献のように
return new StreamedResponse( function(){
の中で配列を記述したり、
$requestを使わないクエリを投げてもデータは取れました。
初心者でクラスについての理解が浅く申し訳ありません。
StreamedResponseの中で$requestが使えてないのが原因だと思いますが、
何か方法はありますでしょうか。
補足情報(FW/ツールのバージョンなど)
Laravel5.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。