マイグレーションやり直し方法とエラー対策:Illuminate Database QueryException

Laravelデータベース

Laravelでmigrateを行ったとき、こんなメッセージが出てきたときの対処法です。

「Illuminate Database QueryException」

また、今後のmigrateエラーを回避するための2つの対策を紹介します。

migrate rollbackをしよう

まずはRollbackをしましょう。

「間違えたから1回戻る」コマンドです。

rollbackのおすすめ手順

まずは今、どこまで反映されているか確認します。

①phpMyAdminにログインして「migrations」をクリックします。

 

②テーブル一覧が出てきます。一番下にあるのが、最新のテーブルです。

migrate するごとに、batch番号(上記表の右側)が増えていきます。
Rollbackを1度かけると、一番大きいbatch番号のmigrationファイルがまとめてRollbackされます。

③コマンドラインに migrate:rollback を入力します。

ちなみに、1回分ではなく、もっと前に戻す!ことも可能です。

たとえば5回前に戻すときは、次のように入力します。

ただ分かりにくくなるので、1回ずつ実施するほうが良いかと思います。

 

④もう一度phpMyAdminにログインします。

きちんとテーブルが削除されているのを確認しましょう。

 

⑤マイグレーションファイルは手動で削除してもOKですし、修正して、再度使ってもOK。

 

⑥テーブルを作りなおし、再度 migrate を実行します。

migrate reset と migrate refresh

おすすめはrollbackですが、もう少し過激(?)な方法もあります。

migrate reset を行うと、すべてのマイグレーションをロールバックしてくれます。

migrate refresh を行うと、すべてのマイグレーションのロールバックに加え、migrateもしてくれます。

該当箇所のマニュアルはこちら。

rollbackがテーブルをひとつずつ削除していたことに比べると、スピーディです。

ただ、これまでテーブルに入っていたデータが消えてしまので要注意。

ロールバックをひとつずつ行っていくほうが安全かと思います。

migrate トラブル防止のための対策2点

今後、migrate トラブルが起こらないようにするための対策を2つ紹介します。

migrate後、マイグレーションファイルは直接編集しない

トラブルの原因ですが、手動でマイグレーションファイルを操作してしまったりすることが原因です。

マイグレートを行った後は、直接、マイグレーションファイルを編集しないようにしましょう。

テーブルにカラム(列)を変更したり、データ型を変えたりするのは、コマンドを使って行いましょう。

カラムを加えたりした後に down を記述すること

マイグレーションファイルを新たに作成すると、ファイルの削除に関するコードが自動で入ってきます。

ファイル下部の function down()の下です。

ところが、カラムを追加したりした時にできるマイグレーションファイルでは、function down()の項目は空欄になっています。

自分でdropメソッドを入力せねばいけません。

たとえば、新たに【admin】というカラムを追加したときは、次の一行を追加します。

dropColumn追加例

ここを入れ忘れていると、きれいに削除できなかったりするので、注意しましょう。

さいごに

今回は、自分の失敗をもとに作成しました。

まとめますと、migrationエラー解決・回避のためのポイントは次の3点です。

  • データベースエラーがでたら、Rollbackをして操作をやり直す
  • データベースは一度マイグレートしたら、コマンドを使って編集するのが安全
  • マイグレーションファイルのfunction down も忘れずに書いておこう

 

コメント

タイトルとURLをコピーしました