SymfonyにDoctrineMigrationsBundleを入れました!
マイグレーションとは
データベーススキーマを安全に更新する方法です。
データベースのスキーマを変更するというデータ移行は最悪の場合データが消えます。
こういった事態を回避する方法として、データベースマイグレーションを行う方法があります。
DBに保存されているデータを保持したまま、テーブルの作成やカラムの変更などを行うための機能です。
一言でいうとDB環境のバージョン管理のようなものです。
マイグレーションの機能として、変更したスキーマを元に戻すこともできますので、万一問題が発生した場合にも切り戻しを行うこともできます。
検証環境
Symfony 2.8.51
Mysql 5.1.73
php 5.6.40
インストール
1 | composer require doctrine/doctrine-migrations-bundle |
app/AppKernel.php に以下を追加します。
1 2 3 4 5 6 7 8 | public function registerBundles() { $bundles = array( //... new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(), //... ); } |
マイグレーションを初期化する
1 | php app/console doctrine:migrations:status |
そうするとmigration_versionsというテーブルが作られました。
カラムはversionしかないです。
マイグレーションファイルを作成す
1 | php app/console doctrine:migrations:generate |
app/DoctrineMigrationsにVersion20190617110939.phpのようなファイルが作られます。
1 2 3 4 5 6 7 8 | public function up(Schema $schema) { $aborting = (!$schema->hasTable('TABLE') || !$schema->getTable('TABLE')->hasColumn('old_column') || !$schema->getTable('TABLE')->hasColumn('new_column')); $this->abortIf($aborting, 'Something went wrong. Aborting. Forget to execute up Version20190621095716'); $this->addSql("UPDATE TABLE SET new_column = old_column"); $this->addSql("ALTER TABLE TABLE DROP COLUMN old_column"); } |
1 2 3 4 5 6 7 8 9 | public function down(Schema $schema) { $aborting = (!$schema->hasTable('TABLE') || !$schema->getTable('TABLE')->hasColumn('new_column') || $schema->getTable('TABLE')->hasColumn('old_column')); $this->abortIf($aborting, 'Something went wrong. Aborting.'); $this->addSql("ALTER TABLE TABLE ADD COLUMN old_column int(11)"); $this->addSql("UPDATE TABLE SET old_column = new_column"); } |
マイグレーション実行
1 | php app/console doctrine:migrations:migrate |
Author Profile
スターフィールド編集部
SHARE