マイグレーションやり直し方法とエラー対策: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 も忘れずに書いておこう

 

Laravelデータベース Laravel・PHP豆知識・トラブル対策

【Laravelの教科書・無料プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

Laravel8版と、最新のLaravel9版、ふたつのテキストご用意してます♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

Laravel8版と、最新のLaravel9版、ふたつのテキストご用意してます♪

Laravel関連のご相談承ってます♪
「Webアプリを開発してほしい」
「社内にLaravelが分かる人がいない。コンサルしてほしい」
そんな企業様のご依頼承っています。
お問い合わせはこちら
Laravel関連のご相談承ってます♪
「Webアプリを開発してほしい」
「社内にLaravelが分かる人がいない。コンサルしてほしい」
そんな企業様のご依頼承っています。
お問い合わせはこちら
Twitter始めました。
40代からプログラミング!

コメント

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