EC-CUBE 4系でマイグレーションを再度実行する方法を解説します。プラグイン開発やカスタマイズ時に、一度実行したマイグレーションをやり直したいケースは多いです。この記事では、2つの方法を具体的なコマンド例とともに紹介します。
EC-CUBEのマイグレーションとは
EC-CUBEはDoctrine Migrationsを使用してデータベースのスキーマ変更を管理しています。マイグレーションを実行すると、migration_versionsテーブルに実行履歴が記録され、同じマイグレーションは再実行されません。
方法1: migration_versionsテーブルから履歴を削除する
最もシンプルな方法は、migration_versionsテーブルから該当レコードを削除することです。
手順
1. 実行済みマイグレーションの確認
SELECT * FROM migration_versions ORDER BY executed_at DESC;
2. 該当レコードの削除
DELETE FROM migration_versions
WHERE version = 'DoctrineMigrations\Version20240101000000';
3. マイグレーションの再実行
bin/console doctrine:migrations:migrate
方法2: doctrine:migrations:migrate でロールバックする
Doctrine Migrationsのdownメソッドを使ってロールバックし、再度適用する方法です。
1つ前のバージョンに戻す場合
# ロールバック
bin/console doctrine:migrations:migrate prev
# 再適用
bin/console doctrine:migrations:migrate
特定のバージョンまで戻す場合
bin/console doctrine:migrations:migrate DoctrineMigrations\Version20240101000000
どちらの方法を選ぶべきか
| 方法 | メリット | デメリット |
|---|---|---|
| テーブル削除 | downメソッド不要、確実 | DB直接操作が必要 |
| ロールバック | コマンドのみで完結 | downメソッドの実装が必要 |
注意点
- 本番環境では必ずバックアップを取得してから実行してください
downメソッドが未実装の場合、ロールバックは失敗します- 外部キー制約がある場合、削除順序に注意が必要です
まとめ
EC-CUBEでマイグレーションを再実行するには、migration_versionsテーブルの履歴削除か、doctrine:migrations:migrateコマンドでのロールバックが有効です。開発環境での動作確認を十分に行ってから、本番環境に適用しましょう。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー