「テーブル作成のマイグレーションファイルに外部キー制約書き忘れた!」みたいなときの対処法です。
マイグレーションファイルが増えるのが気にならない場合や、複数人で管理している場合は、新しくマイグレーションを追加してテーブル定義を変更したほうがいいと思います。
1. テーブルを出力する
対象のデータベースのテーブルを全て出力します。
$ mysqldump --no-create-info --ignore-table=database_name.migrations -u user_name -ppassword > ~/dumps/database_name_20210101.dump
ポイント
-
--no-create-info
オプション : マイグレーションでテーブルは作成するので、CREATE TABLE ~
を出力しないオプションです。INSERT INTO ~
のみが出力されます。 -
--ignore-table=database_name.migrations
: マイグレーションデータが保存されているテーブルを出力しません。
2. マイグレートする
ファイルを書き換えたあと、マイグレーションを実行します。
php artisan migrate:fresh
注意
migrate:fresh
はデータベース内の全てのテーブルをDropするので、データベースをLaravelアプリケーション以外と共有している場合はmigrate:refresh
等を検討してください。
3. 挿入する
出力したデータを再度データベースに追加します。変更したテーブル定義が、変更前と互換性がないと、挿入できないので注意してください。
mysql -u user_name -ppassword -D database_name < ~/dumps/database_name_20210101.dump
エラーがでなければ、大丈夫です。