drupalのDBのデータを取得し、csvに出力してみた!
- CMS
Drupalのデータベースに対して単純なSELECT文を実行してデータを取得し、取得したデータをcsvとして出力する方法について紹介しています。
各実装に対してソースの例も記載しているので、ぜひ参考にしてみてください。
drupalのDBからデータを取得
SELECT文を実行し、drupalのDBからデータを取得した後、実行結果を変数に格納する手順です。
$database = \Drupal::database();
$result = $database->query("ここに実行するクエリを記載します。");
------ソース例------------------------------
// 接続オブジェクトをインスタンス化する。
$database = \Drupal::database();
// インスタンス化したデータベース接続オブジェクトのqueryメソッドを使い、クエリを実行する。
$result = $database->query("SELECT * FROM TABLE_NAME");
------------------------------------------
データベース接続オブジェクトをインスタンス化した後、queryメソッドでクエリを実行しています。
$result変数に、クエリ実行結果のすべての行が格納されています。
単純なSELECTをする場合であれば、queryメソッドを使用すればよいのですが、INSERT、UPDATE、DELETEの際はそれぞれinsertメソッド、UPDATEメソッド、DELETEメソッドが用意されているため、そちらを使用する必要があります。
queryメソッドは、あくまで静的なクエリを実行する際のメソッドです。
取得データを出力する形に加工する
取得データに対して区切り文字などを付与し、最終的に出力したい形に加工する手順です。
csvファイルで出力する際には、取得したデータをカンマ区切りなどで出力することが多いかと思います。
以下は、取得したデータをカンマ区切り、改行コードCRLFで出力する例を記載しています。
// 出力するcsv用の変数を用意
$result_csv = '';
// fetchAssocメソッドで、取得したデータを連想配列として$assoc変数に格納する
for($i=0; $assoc = $result->fetchAssoc() ;$i++) {
// $assocに格納された配列データを、improdeメソッドでカンマ区切りにし、$result_csv変数に格納する
// 改行コードは、\r(CR)、\n(LF)、\r\n(CRLF)
$result_csv = $result_csv . implode('","', $assoc) . "\r\n";
}
if($i > 0){
// 必要に応じてmb_convert_encodingメソッドなどでエンコードする。
$result_csv = mb_convert_encoding($result_csv, 'sjis', 'UTF-8');
} else {
// SELECT結果が0件の場合
return false;
}
上記の例では、fetchAssocメソッドで、取得した$resultから各行を連想配列として$assoc変数に返しています。
$assocに連想配列として格納された各行のデータを、improdeメソッドによりカンマ区切りに加工しています。
データを取得した際にUTF-8で取得されているため、上記の例ではmb_convert_encodingメソッドを用いてSJISにエンコードしています。
任意の場所にcsvファイル作成、出力データ書き込み
任意の場所にcsvファイルを作成し、上記で取得・加工したデータを書き込む手順です。
$file_name = /csv_data/data.csv
// fopenメソッドで、作成するファイルパスを指定しファイルを作成する。
// 'w'は書き出しモードの指定
$fp = fopen($file_name, 'w');
if($fp){
// 加工後データ$result_csvを、作成したファイルに書き込む。
fwrite($fp, $result_csv);
// ファイルを閉じる。
fclose($fp);
unset($fp);
} else {
return false;
}
fopenメソッドでは、第一引数に指定されたファイルをオープンします。
第二引数はパラメータmodeで、「読み込み」「書き出し」「読み込み/書き出し」などを指定してファイルをオープンできます。
上記の例では、書き出しモードの'w'を指定しており、'w'の場合、ファイルが存在しない場合はファイルを作成します。
パラメータmodeのリストについては、phpのマニュアルサイトを参照してください。
ファイル作成後、fwriteメソッドで加工したデータの書き込みを行っています。
書き込み後、fcloseメソッドでファイルを閉じるのを忘れないようにしましょう。
まとめ
以上、DrupalのDBからデータを取得し、csvに出力する方法でした。
csvの区切り文字や改行コードなどについては、必要に応じて変更してください。