コラム
2020/12/25

drupalのDBのデータを取得し、csvに出力してみた!

  • CMS

drupalのDBのデータを取得し、csvに出力してみた!Drupalのデータベースに対して単純なSELECT文を実行してデータを取得し、取得したデータをcsvとして出力する方法について紹介しています。

各実装に対してソースの例も記載しているので、ぜひ参考にしてみてください。

リーフレットダウンロード  「CMS(Drupal)」をもっと知りたい方はこちらへ

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メソッドでファイルを閉じるのを忘れないようにしましょう。

まとめ

WEBSASくん

以上、DrupalのDBからデータを取得し、csvに出力する方法でした。
csvの区切り文字や改行コードなどについては、必要に応じて変更してください。

  1. <<
  2.   
  3. 1
  4.    
  5. 2
  6.    
  7. 3
  8.    
  9. 4
  10.  
  11. >>