LaravelでCSVを作成・ダウンロード
LaravelでCSVを作成・ダウンロードする場合、LaraCSVが非常に便利なのでご紹介します。
		  目次
		  
		  
		  
		
LaraCSV
インストール
$ composer require usmanhalalit/laracsv:^2.0
モデル(コレクション)からCSVを生成
LaraCSVは、モデルのデータを使ってCSVを生成することができます。
$users = User::all();
$csvExporter = new \Laracsv\Export();
$csvExporter->build($users, [
    'name' => 'ユーザー名',
    'email' => 'メールアドレス',
]);
$csvReader = $csvExporter->getReader();
表示データの加工
日付のフォーマットを変更したい場合には、CSVを生成する前に各データの加工することができます。
$users = User::all();
$csvExporter = new \Laracsv\Export();
$csvExporter->beforeEach(function ($user) {
    $user->created_at = $user->created_at->format('Y-m-d');
});
$csvExporter->build($users, [
    'name' => 'ユーザー名',
    'email' => 'メールアドレス',
    'created_at' => '登録日',
]);
$csvReader = $csvExporter->getReader();
文字化け対策(BOMの設定)
エクセルで開いた際にUTF-8だと文字化けするのを防ぐためにBOMを設定が必要です。
$csvReader->setOutputBOM(\League\Csv\Reader::BOM_UTF8);
ユーザー情報をCSVで出力するサンプル
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\User;
class UserController extends Controller
{
    public function csv()
    {
        $users = User::all();
        $csvExporter = new \Laracsv\Export();
        $csvExporter->beforeEach(function ($user) {
            $user->created_at = $user->created_at->format('Y-m-d');
        });
        $csvExporter->build($users, [
            'name' => 'ユーザー名',
            'email' => 'メールアドレス',
         'created_at' => '登録日',
        ]);
        $csvReader = $csvExporter->getReader();
        $csvReader->setOutputBOM(\League\Csv\Reader::BOM_UTF8);
        $filename = 'sample.csv';
        return response((string) $csvReader)
            ->header('Content-Type', 'text/csv; charset=UTF-8')
            ->header('Content-Disposition', 'attachment; filename="'.$filename.'"');
    }
}
連想配列からCSVを作成
モデルだけではなく、連想配列をObjectに変換したものからもCSVに変換できます。
$collection = collect([
    (object) [
        'website' => 'twitter',
        'url' => 'twitter.com'
    ],
    (object) [
        'website' => 'google',
        'url' => 'google.com'
    ]
]);
$csvExporter = new \Laracsv\Export();
$csvExporter->build($collection, [
    'website' => 'ウェブサイト',
    'url' => 'URL',
]);
$csvReader = $csvExporter->getReader();
CSVをダウンロードさせる
作成したCSVは以下のコードによってダウンロードすることも可能です。
$csvReader = $csvExporter->getReader();
$csvReader->setOutputBOM(\League\Csv\Reader::BOM_UTF8);
return response((string) $csvReader)
        ->header('Content-Type', 'text/csv; charset=UTF-8')
        ->header('Content-Disposition', 'attachment; filename="'.$filename.'"');