けけずんセルフハッキング

エンジニアっぽい雰囲気を醸しだしているかのようなブログです!

LaraCSV 触ってみた

LaravelでCSVをどうこうするLaraCSVについてちょっと触ってみたのでメモ。 Twitterで @laravelnews が言及してたのがきっかけ。

Laravel News on Twitter: "LaraCSV – Generate CSV files from your Eloquent models https://t.co/m55TsES0bv… "

LaraCSVとは

作成者いわく「Eloquent Modelから簡単にCSVファイルを生成できるLaravelパッケージ」とのこと。 実際はModelからもCSV生成できるし、arrayをCollectionにしてそこからCSVの生成もできる。

使用手順

パッケージ追加

terminalから下記のコマンドを実行する。

$ composer require usmanhalalit/laracsv:^2.0

使い方(基本)

インスタンスの生成とCSVのビルドをする。

// インスタンスを生成する
$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
   """

ReaderでCSVJsonとして取得する

$csvReader = $csvExporter->getReader();
$csvReader->jsonSerialize();
=> [
     [
       "email",
       "name",
     ],
     [
       "test01@test.com",
       "テストユーザ01",
     ],

補足

Laravel Meetup Miyazakiで登壇した際に使用した資料がこちら。