質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1566閲覧

Laravel 検索結果をCSV出力できるようにしたい

t0mmm

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/05/31 02:24

  1. 前提・実現したいこと

 一覧ページでの CSV出力はできるが検索結果での CSV出力ができない

  1. 発生している問題・エラーメッセージ

 エラーメッセージは現状は出ていません。

3. 該当のソースコード

web.php

1Route::get('/downloadcsv/{mode}', [ProductController::class, 'downloadcsv'])->name('downloadcsv'); 2

view

1<a href="{{ route('downloadcsv',['mode' => $downloadmode[0]]) }}" class="btn btn-primary">CSVダウンロード</a>

Controller

1### 一覧ページ表示 2return view( 3 'vending_all', 4 [ 5 'products' => $products, 6 'companys' => $companys, 7 'downloadmode' => ['all'], 8 ] 9 ); 10### 検索機能表示 11return view( 12 'vending_all', 13 [ 14 'products' => $products, 15 'companys' => $companys, 16 'campany_id' => $company_id, 17 'downloadmode' => ['all'], 18 ] 19 ); 20### 並び替え表示 21return view( 22 'vending_all', 23 [ 24 'products' => $products, 25 'companys' => $companys, 26 'downloadmode' => ['all'], 27 ] 28 ); 29### CSV出力 30public function downloadcsv($mode, Request $request) 31 { 32 \Log::info("downloadcsv",[$mode]); 33 // dd($mode); 34 $products = Product::all(); 35 36 $response = new StreamedResponse(function () use ($products) { 37 $stream = fopen('php://output', 'w'); 38 foreach ($products as $product){ 39 fputcsv($stream, [ 40 $p->id, 41 ]); 42 } 43 fclose($stream); 44 },200, 45 [ 46 'Content-Type'=>'text/csv', 47 'Content-Disposition'=>'attachment; filename=products.csv', 48 ]); 49 return $response; 50 }
  1. 自分で調べたことや試したこと

 検索機能・並び替えで表示するreturn viewの'downloadmode' => ['all'],の配列のallを帰ればいいのかと思いましたがCSV出力でのdownloadcsv関数の中を変数に代入しないとだと思いましたがどのように記述したらいいのかわからなくなりました。

  1. 使っているツールのバージョンなど補足情報

 Laravel8での作成

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

public function downloadcsv()
の実装において、
$modeも使っていなければRequest $requestも使っていないようですね。

検索条件を受け取れるよう、ルーティングを改善して
downloadcsv() に検索条件が届くようにして、
$products = Product::all(); じゃなく検索条件を加味したものにできればよいかと。

検索条件が単純なものであれば、GETで受け取る前提で質問文中の Route::get を拡張すればいいですが、
数個のパラメータで収まらない複雑なものであればPOSTで処理したほうが良いでしょう。

投稿2022/05/31 02:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t0mmm

2022/05/31 05:46

public function downloadcsv()内でdd($mode);を置いて"all"と返ってきたので恐らく一覧表示の結果ではないのかと思っています。dd($request);は何も入っていませんでした。 return view()の配列で検索機能と並び替え機能で['all']以外で指定しcsv出力で条件を分けることができますでしょうか?
退会済みユーザー

退会済みユーザー

2022/05/31 06:48

$modeが'all'だろうがなんだろうが、以後の処理で使っていないし、$products = Product::all();を基にレスポンスを作っているよ、ということで、 Route::get('/downloadcsv/{mode}', [ProductController::class, 'downloadcsv']) を書いている以上 $mode しか引き渡せない構造なのです。 では検索結果を返せるようにするためにはどうするか、 まずルーティングをどう直すか、それ次第でやり方も変わってくるかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問