2018/10/15更新

[PHP] Laravel5+のマイグレーションで、カラムが存在するかをチェックしてからカラム削除する

このエントリーをはてなブックマークに追加      

Laravelのマイグレーションでカラム削除する際に、カラムが存在するかを事前にチェックする方法を、ブログに書きたいと思います。



なぜ必要か

例えば、Laravelのマイグレーションでup()でカラムを追加する場合、down()でカラム削除を実装します。そして、migrate:rollbackmigrate:refreshをする際に、カラム削除に失敗し、処理が途中で止まってしまうということがありました(原因としては例えば、DBを手動で修正してカラムをドロップしていたなど)。

マイグレーションの処理が途中で止まると非常に困ります。マイグレーション外でDB変更がされていたとしても、エラーなく処理ができるように、今回の実装を少し取り入れると良いかなーと思います。



カラムの存在チェックをしてから、カラムをdropする

以下のように実装します。
public function down() {

   // カラムが存在することをチェック.
   if (Schema::hasColumn('users', 'phone')) {

       // カラムがあれば、そのカラムを削除.
       Schema::table('users', function (Blueprint $table) {
           $table->dropColumn('phone');
       });
   }
}
上記はdown()での実装例ですが、up()でも同様に実装が可能です。



公式ドキュメント

hasColumnの説明は、以下の公式ドキュメントにあります。ご参照ください。
https://laravel.com/docs/migrations#tables



最後に

テーブル削除の場合にはSchema::dropIfExists('users');と書けるので良いのですが、カラムでも同じようなメソッドが用意されたら良いなぁ〜。Laravelはなかなか奥が深いのですが、色々な案件で使っているので、少しずつでもノウハウをアウトプットしていきたいと思います。

最後になりますが本ブログでは、PHP、サーバー、フロントエンド、インフラ、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSTwitterをフォローして貰えたら嬉しいです ^ ^

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。