やったこと

webサービスを作るときに考えたことを垂れ流します

【CakePHP3】マイグレーションのDB変更が反映されない!

先日CakePHP3の「Migration機能」で、あるテーブルに変更を加えたんです。

以下のような感じで「tweet_type」というカラムをテーブルに追加する変更をやりました。

class AddTweetTypeProducts extends AbstractMigration
{
    public function change()
    {
      $table = $this->table('tweets');
      $table->addColumn('tweet_type', 'integer', ['default' => 1, 'null' => false,])
            ->update();

      $table = $this->table('draft_tweets');
      $table->addColumn('tweet_type', 'integer', ['default' => 1, 'null' => false,])
            ->update();
    }
}

上記をマイグレーションコマンドで実行すると、たしかにテーブルに新しくカラムが追加されます。

でも「Table->find」でデータを取得すると「tweet_type」のない古い状態のレコードが取得されてしまうんです・・。

これはどうもCakePHPのキャッシュに、古いテーブルのスキーマ情報が保存されてしまっていることが原因っぽいです。

「tmp/cache/models/」のディレクトリがありますよね。ここにあるファイルを全部削除して空にしてみたところ、新しいスキーマが反映されてちゃんと「tweet_type」のカラムを操作できるようになりました。

DBに変更を加えたら「models」のキャッシュを削除しなくてはいけない、こんな決まりがあるとは知りませんでした。

CakePHPはなかなか甘くないですね・・。

以上です・・。