cakephp3 で特定のcsv ファイルを読み込むシェルのコード

適当に src/Shell とかに配置しておけばおk


<?php namespace App\Shell; # shell 用なので名前空間もそれ用に指定する #使うすべてのクラスを読み込む use App\Controller\AppController; use Cake\Filesystem\Folder; use Cake\Filesystem\File; use Cake\Console\Shell; use Cake\ORM\TableRegistry; use Cake\Datasource\ConnectionManager; class csv_reading extends Shell { #コマンドラインからシェルを実行するとデフォルトで main 関数が呼ばれるらしいので main に指定。ここに関数をしたい場合はコマンドラインの第二引数にその関数を指定すれば大丈夫だと思います。 public function main() { // それぞれの変数を指定(変更する場合はここをかえるだけで大丈夫だと思います) // csv ファイルの置き場を指定 $FILE_PATH = "hogehoge.csv"; // 作成したテーブル名を指定 $TABLE_NAME = 'hogehoge_import'; // CSV のファイルを読み込むオブジェクトの準備 $file = new \SplFileObject($FILE_PATH); $file->setFlags(\SplFileObject::READ_CSV); //data の配列を初期化 $csv_data = array(); //多次元配列の番号のため初期値をセットしておく $COUNT = 0; //for文で一行ずつ判定 foreach ($file as $row) { if ($row === [null]) continue; //ヘッダーが空ならそれを入れるのだがよく不明 if (empty($header)) { $header = $row; continue; } $COUNT = $COUNT + 1; //多次元配列でCSVのデータを取得 $csv_data[$COUNT]["id"] = $COUNT; $csv_data[$COUNT]["hogehoge_id"] = $row[0]; $csv_data[$COUNT]["name"] = $row[5]; } // hogehoge_importのテーブルのモデルを取得 $articles = TableRegistry::get($TABLE_NAME); // Entities作成 $query = $articles->query(); $query->insert(['id','hogehoge_id','hogehoge_name']); // 先ほどの $data 変数に入っている多次元配列のデータを回して全部のデータに対してセーブする。 foreach ($csv_data as $insert_data) { //実際にセーブする $query->values($insert_data); } $query->execute(); } }