概要
タイトル通りです。今回はプラグインを導入してCSVを出力させることを試みます。
CsvViewプラグイン導入
手順自体は参考通り。
Composerを利用して導入。
$ composer require friendsofcake/cakephp-csvview:~3.0
config/bootstrap.phpに以下を追加。
Plugin::load('CsvView');
定数とDBから引っ張ってきたデータを同一列に書き込みたい場合
$_extractにカラム指定をすれば、$_serializeで指定したqueryから引っ張ってきたカラムを取捨選択・加工してCSVにすることができる。この時、無名関数を渡すこともできるので、それを利用して値を返したりすることができる。例えば、特定カラムの値を参照して定数を出力してあげたい(かつ扱うDBが持つテーブル群がその定数を保持していない)場合に嬉しい。これは、各レコードが関数に渡されて実行されるので、全レコードがその検査を受けることになる。試してないけどこの時渡されるのはEntityなんだろうか。
php
$_extract = [
'id',
function ($row) {
if($row['code'] === '山') {
return '川';
} else {
return '';
}
},
// 以下固定値
function () {
return '096';
},
'created'
];
0落ちあれこれ(おまけ)
定数とDBから〜では’096’をCSVに差し込むように処理しているが、このCSVをExcelなどで開くと、設定にもよるが先頭の0は表示してくれない。96になる。CSV自体をテキストエディタなどで開くと096が入っており、内部的には問題ないが、もしどうにかして(手動でExcel等の設定をいじらずに)表示させたい場合には以下のようにすると一応出るようになる。
php
$_extract = [
// 以下固定値
function () {
return '="096"';
},
];
ただし文字列扱いなのでデフォルトでは左寄せになる。正直実用性の怪しい小技レベル。