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);
}
とりあえずは以上です。