2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

cakephp4 migrate,seedのtips

Last updated at Posted at 2020-08-16

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,updateCURRENT_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

基本操作

bin/cake bake seed Local
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();
    }

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?