今回は、CSVを出力する際にSQLのみでヘッダーを付ける方法を紹介します。
一般的なやり方
通常は、データを取得した後にプログラム内でヘッダーを設定します。以下のSQLクエリでデータを取得します。
SELECT
name,
email,
created_at
FROM
user;
そして、取得したデータのヘッダーを設定します。
$header = ['名前', 'メールアドレス', '作成日時']; // ヘッダーを設定
$data = $this->dataGet()->toArray(); // データを配列で取得
$csvData = array_merge([$header], $data); // ヘッダーとデータをマージ
// 出力処理
今回は少ないカラム数でしたが、これがもっと多くのデータとなると、Controllerが肥大化してしまう原因にもなりますし、データをプログラム内で処理する手間がかかります。
SQLのみでヘッダーを追加する方法
より簡単にヘッダーを追加できる方法を知ったので、皆さんに共有したいと思います。この方法では、SQLクエリ内でヘッダー行を作成し、データセットに統合します。
SELECT
'名前' as name,
'メールアドレス' as email,
'作成日時' as created_at,
0 as sort
UNION ALL
SELECT
name,
email,
created_at,
1 as sort
FROM
user
ORDER BY sort;
この方法のメリットは次のとおりです。
簡潔性
SQLクエリのみでヘッダーを設定できるため、コードがシンプルになります。
一貫性
ヘッダーとデータを一貫した形式で扱えるため、バグの発生率が低下します。
パフォーマンス
ヘッダー設定をSQL内で完結させることで、追加のプログラム処理を省略できます。
この方法を使えば、データセットの最初にヘッダー行が追加され、手動でヘッダーを追加する手間が省けます。SQLのみで完結します。