migrate
基本操作
- migrateファイルを作成する(参考)
bin/cake bake migration CreateProducts name:string description:text created modified
- migrateファイルを編集する(参考)
$table->addColumn('name', 'string', [
'default' => null,
'limit' => 255,
'null' => false,
]);
- migrateを実行する(参考)
bin/cake migrations migrate
- migrateをロールバックする(参考)
bin/cake migrations rollback
Tips
-
全てのテーブルに機械的に入れる登録日、更新日はマニュアルに合わせてcreatedとmodified、または
xxx_at
形式を利用する(参考)
自動でdatetime
と判断してもらえるぐらいの恩恵しかないかもしれないけれども。 -
機械的に入れる登録日、更新日には
default
,update
にCURRENT_TIMESTAMP
を設定すると、ソースコードから設定しないで済むので便利。
$table->addColumn('created', 'datetime', [
'default' => 'CURRENT_TIMESTAMP',
'null' => false,
]);
$table->addColumn('modified', 'datetime', [
'default' => 'CURRENT_TIMESTAMP',
'null' => false,
'update' => 'CURRENT_TIMESTAMP',
]);
- 初期開発時点ではあまりMigrationファイルを増やしたくないので、rollbackして再度migrateしている。(最初から複数人開発する場合はできないけど)
seeds
基本操作
- seedファイルを作成する([参考]
(https://book.cakephp.org/migrations/3/ja/index.html#seed))
bin/cake bake seed Local
- seedデータを投入する([参考]
(https://book.cakephp.org/migrations/3/ja/index.html#seed))
bin/cake migrations seed
Tips
- seedはテーブルごとに作っても良いが、ローカル向けで簡単に作りたいなら1ファイルで行ってしまって良い
ファイル数増えて実行順番とか考えると大変なので1ファイルで作ってしまうことが多い。以下のようなイメージ。
テーブル数が多いならprivate functionではなく別ファイルにしても良いかも。
public function run()
{
$this->insertAaas();
$this->insertBbbs();
}
private function insertAaas(){
$data = [xxx];
$table = $this->table('Aaas');
$table->insert($data)->save();
}
- 再実行可能なようにtruncateを含ませる
seedデータ変更の都度、データをtruncateするのは面倒くさいので、seedに記載してしまう。
truncateは外部キー制約のあるテーブルに対してはエラーになるのでSET FOREIGN_KEY_CHECKS = 0
するのがポイント
use Cake\Datasource\ConnectionManager;
(略)
public function run()
{
$connection = ConnectionManager::get('default');
$connection->execute('SET FOREIGN_KEY_CHECKS = 0');
$this->table('aaas')->truncate();
$this->table('bbbs')->truncate();
$connection->execute('SET FOREIGN_KEY_CHECKS = 1');
$this->insertAaas();
$this->insertBbbs();
}
参考