LoginSignup
17
19

More than 5 years have passed since last update.

LaravelでCSVダウンロード

Last updated at Posted at 2015-08-13

CSVダウンロードの実装はどの言語、どの環境でもいつも悩ましいですね。
ここでは、都度、CSVダウンロードの方法を模索してみたいと思いますが、とりあえずfputcsvから。

fputcsvを使う場合

コントローラーのcsv()メソッドのみ抜粋。
検索結果のCSVダウンロードにも対応できるようにkeywordを受け取っています。

public function csv()
    {
        //keyword
        $keyword = \Input::get('keyword');

        //クエリ生成
        $query = User::query();

        //もしkeywordがあれば条件設定
        if(!empty($keyword))
        {
            $query->where('email','like','%'.$keyword.'%');
        }

        //クエリ実行
        $users = $query->get();

        //仮ファイルOpen
        $stream = fopen('php://temp','w');

        //loop
        foreach($users as $user)
        {   
            //カラムを選択
            fputcsv($stream,[$user->id,$user->name]);
            //全カラムの場合はtoArray()を使えば良い
            //fputcsv($stream,$user->toArray());
        }

        //ポインタの先頭へ
        rewind($stream);

        //いろいろ変換
        $csv = mb_convert_encoding(str_replace(PHP_EOL, "\r\n", stream_get_contents($stream)), 'SJIS', 'UTF-8');

        //file名
        $filename = "users_".date('Ymd').".csv";

        //header
        $headers = array(
            'Content-Type' => 'text/csv',
            'Content-Disposition' => 'attachment; filename="' . $filename . '"'
        );

        //response
        return \Response::make($csv, 200, $headers);
    }

とりあえずは以上です。

17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19