Rollbackをしてもマイグレーションエラーが繰り返されて、こんなメッセージが出てくるとき。
Illuminate/Database/QueryException
SQLSTATE[42S21]: Column already exists:
SQLSTATE[42S21]: Column already exists:
追加したりリネームしたカラムが原因かもしれません。(←私がそうでした!)
マイグレーションファイルに削除のときのコードを書き忘れた、あるいは書き間違えている可能性があります。
思い当たる場合には、マイグレーションファイルで下記の2点をチェックしてみてくださいね。
カラムを追加したときはdropColumnを忘れずに
カラムを追加したときには、マイグレーションファイルのfunction down () にdropColumnを追加します。
たとえば division_id カラムを追加した場合には、下記のコードを入れます。
1 |
$table->dropColumn('division_id'); |
編集後のファイルはこちら。
きちんと入っているか、確認してみてください。
カラム名を変更したときは順番を間違えないように
カラム名を変更する場合、たとえば player_id を worker_id に変更する場合は、マイグレーションファイルのfunction up ()に次のようにいれます。
1 |
$table->renameColumn('player_id', 'worker_id' ); |
function down () には、このカラム名を逆にしていれておきましょう。
1 |
$table->renameColumn('worker_id', 'player_id'); |
なぜなら、削除するときにはカラム名をもとに戻す必要があるからです。
編集後のファイルはこちら。
ちょっとややこしいのですが、きちんと設定しておかないと、ロールバックしても、きれいに削除できません。
すると、そのあとにマイグレートを実施する時にエラーメッセージが表示されます。
なおマイグレーションのやり直し方法はこちらの記事を参考にしてください。
エラー対策はこちらにまとめてあります。