LaravelでCSVをどうこうするLaraCSVについてちょっと触ってみたのでメモ。 Twitterで @laravelnews が言及してたのがきっかけ。
LaraCSVとは
作成者いわく「Eloquent Modelから簡単にCSVファイルを生成できるLaravelパッケージ」とのこと。 実際はModelからもCSV生成できるし、arrayをCollectionにしてそこからCSVの生成もできる。
使用手順
パッケージ追加
terminalから下記のコマンドを実行する。
$ composer require usmanhalalit/laracsv:^2.0
使い方(基本)
// インスタンスを生成する
$csvExporter = new \Laracsv\Export();
// 第一引数にCollectionを、第二引数にCSVで出力したいモデルのカラム名を入力する
$csvExporter->build(Users::get(), ['email', 'name']);
ダウンロードする。
$csvExporter->download();
email,name
test01@test.com,"テストユーザ01"
test02@test.com,"テストユーザ02"
ファイル名を指定してダウンロードする。
$csvExporter->download('users.csv');
使い方(応用)
リレーションを引っ張ってくる。
$csvExporter->build(Users::get(), ['email', 'name', 'department.name']);
カラムの値を修正したり、モデルに存在しないカラムをCSVのフィールドとして追加する。
$csvExporter->beforeEach(function($user) { // 既存の値を上書きできる $user->email = 'hoge@piyo.com'; // 存在しない値を追加できる $user->note = $user->name . 'のメモです'; }) $csvExporter->build(User::get(), ['email', 'name', 'note'])->download() email,name,note hoge@piyo.com,"テストユーザ01","テストユーザ01のメモです" hoge@piyo.com,"テストユーザ02","テストユーザ02のメモです"
WriterでCSVを文字列として取得する
$csvWriter = $csvExporter->getWriter(); $csvWriter->getContent(); => """ email,name\n test01@test.com,"テストユーザ01"\n test02@test.com,"テストユーザ02"\n """
$csvReader = $csvExporter->getReader(); $csvReader->jsonSerialize(); => [ [ "email", "name", ], [ "test01@test.com", "テストユーザ01", ],
補足
Laravel Meetup Miyazakiで登壇した際に使用した資料がこちら。