1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laracsvを使用して、ブラウザからDatabase情報をCSVに出力する

Last updated at Posted at 2024-10-30

概要

Laravelをwebアプリを作成した際、DBのModelからCSVの形式で落とす方式で、
試行錯誤したのでメモとして残します。

Laracsvについて

Eloquent Modelから簡単にCSVファイルを生成できるライブラリになります。
実際シンプルに実装することができました。
https://github.com/usmanhalalit/laracsv

インストール手順

ライブラリを使う際はあらかじめ以下のコマンドでPJ配下に取り込んでおく必要があります

$ composer require usmanhalalit/laracsv:^2.0

実装

①インスタンスを生成

名前空間の指定は必要ありません

$csvExporter = new \Laracsv\Export();

②DBモデルから情報を取得し、CSVに変換

例としてUserモデルから情報を取得します
App/Http/ModelsにUser.phpのModelを作成済み("name"と"email"のfieldを持ったDB)

// Model Userからデータを取得
$user = User::all();
//CSV変換:第1引数にcollection、第2引数で取得するfieldを指定
$csvExporter->build(Users::get(), ['name', 'email']); 

Modelから特定の列を抽出したい場合
例として'name'が'hoge'の列のみを抽出する場合は以下のように書きます

$user = User::where('name','hoge')->get;

headerを変更したい場合
headerをfieldの値でなく、独自に変更したい場合は以下のように指定

$csvExporter->build(Users::get(), ['name' => '名前', 'email' -> 'メール']); 

③文字化けを防ぐためBOMの設定

BOMを設定しないと、SJISの文字コードが入っていると文字化けします

$csvReader = $csvExporter->getReader();
$csvReader->setOutputBOM(\League\Csv\Reader::BOM_UTF8); 

④CSVをBODYに入れて、responseを返す

Controller等でreturnとして返せば、ブラウザからダウンロードができます

return response((string) $csvReader)
->header('Content-Type', 'text/csv; charset=UTF-8')
->header('Content-Disposition', 'attachment; filename="'.$fileName.'"');
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?