LaravelのMigrationでカラムを追加、編集、削除のやり方。初心者でもよく分かるように解説!

更新日:

Laravelのmigrationのやり方は分かったんだけど、カラムを追加したいのに、同じファイルを書き換えても、マイグレーションするファイルが無いって出ちゃってできないんだけど・・

 

テーブル作成時のmigrationファイルを書き換えて、php artisan migrateをやっても、新たなカラムの追加や削除はできません。

というわけで、migrationでカラムを追加、削除、編集する方法を分かりやすく解説します。

*一応この解説はLaravel6をベースに解説しています。

 

LaravelのMigrationとは?初心者でも図解で面白いほどよく分かる!

 

Laravelのmigrationでカラムを追加する方法

例えば、すでにpostsというテーブルがあって、そこに新しいageというカラムを追加したいとします。その場合、

php artisan make:migration add_age_to_posts_table --table=posts

というコマンドを使います。(オレンジ部分を自分にあった形に変更します)。

 

コマンドを解説すると、

add_age:age(というカラム)をadd(追加)する
_to_posts_table:post テーブルに対して。

という意味があります。

 

なんか長ったらしいけど、短くadd_ageだけにするとダメなの?
実はそれでも動くよ。でもおすすめしない。
Neby

理由は、

1. 他のテーブルでも同じ名前のカラムを作る事がよくある。その時、クラス名が同じになるのでバグる可能性がゼロではない。

 

2.ファイル名でパッとどのテーブルに追加した奴なのかが分からない。

そういう理由もあるから、ちゃんとadd_age_to_posts_table とした方がいいよ。
Neby

 

そして、必ず --table=posts を付けてください。これがどのテーブルに追加するのかを示しています。postsに追加するので、=postsです。usersなら=usersに変えます。

 

Laravelプロジェクトフォルダ→database→migrationsと開き、ファイルを開きます。

 

赤枠のように、追記したいカラム情報を入力し、上書き保存します。

 

そして、php artisan migrate でEnterすれば完了です。

これで、無事追加できました。

 

Laravelのmigrationでカラムを削除する方法

あ、今追加したカラム、いろいろ間違えてたから、やっぱ削除したいんだけど。

 

*もし、そのカラムにすでにデータがある場合は、必ずphpMyAdminからデータのバックアップを取ってくださいね。データも消えますので。

 

そういう場合は、今度は、

php artisan make:migration remove_age_from_posts_table --table=posts

とコマンドを打って、Enterします。(オレンジ文字はご自身のテーブルとカラム名に書き換えてください。)

できたファイルを開きます。

 

今度は、同じくfunction up() 側に、$table->dropColumn('age'); と入力します。
dropColumnというのが、カラム削除コマンドです。

ちなみに、function down()の方にも、カラム作成時に書いたコードを書いておくと、後日、もしロールバックという前の状態に戻す操作を行った際、消したカラムが戻ります。

downっていうのは、あくまでロールバックなどの巻き戻しコマンドを使う時用の欄なんで、それが不要なら、down側は空欄でもOKです。
Neby

 

ファイルを上書き保存したら、

php artisan migrate で削除完了です。

 

あ、やっぱカラム削除しなきゃ良かったなぁ~って時に戻す方法ってあるの?
今解説したロールバックを使えば、カラムを戻せるよ。ただし、今話した通り、down側に何も書いてないで使うと、自分が予想した以上に前の状態に戻ってしまう可能性がある(つまり前々回の消したくないマイグレーションまで消えたりするという大事故が起こる)から、かなり注意して使った方がいいよ。正直あまりおすすめしない。

php artisan migrate:rollback

このコマンドを打てば、前のファイルのdownに書かれたコマンドが実行されて、元に戻るよ。元に戻ったら、戻ったファイル以降の日付のファイルはPC内の別のフォルダに移動するなり、消すなりしないと、次migrateした時にまた同じファイルが実行されちゃうから気をつけて。(つまりいろいろややこしい・・)

Neby
そっか。じゃあ普通に削除後、もしまた同じ名前のカラムを作り直したい時は、カラム追加と同じ操作すれば大丈夫なの?
うん、それで大丈夫。一つポイント。一度php artisan migrateしたファイルは、もう一度migrateコマンドを打っても、マイグレーションされない。

 

だけどファイル名を変えたら、

例えば、2020_10_13_130538_add_age_to_posts_table.phpっていうファイルだったら、先頭に日付と時刻が付いてるわけ。

この日付を、現在時刻に書き換える、例えば、

2020_10_13_130538_add_age_to_posts_table.php

2020_10_13_140538_add_age_to_posts_table.php

みたく、変更すれば、新しいファイルとして認識させる事も可能だよ。(一人で作業してる分にはいいけど、共同作業の場合は、どこをイジったかの履歴が分かりづらくなるのでやらない事。)

Neby

 

Laravelのmigrationでカラムを編集する方法

上の説明のように、一度削除して、作り直すって手もありますが、
削除せずに書き換える方法もあるっちゃあります。

ただ、この方法を使うには、doctrine/dbalというLaravelパッケージのインストールが必要です。なので、cdでLaravelプロジェクトフォルダに移動したら、

composer require doctrine/dbal

というコマンドを打って、Enterし、まずdoctrine/dbalをインストールします。(5分程度かかります。)

 

インストールが完了したら、

php artisan make:migration edit_age_of_posts_table --table=posts

というコマンドを打ち、Enterします。(オレンジ文字はご自身のテーブルとカラム名に書き換えてください。)

ファイルを開きます。

追加の時と同様に、up側に、変更したいカラムの情報を書きます。例えば、この例の場合、さっきはdefault(0)にしましたが、やっぱりdefault(18)にしたいので、そう書き、->change()というコマンドを付け足しました。

例えば、今はintegerだけど、やっぱりstringでnullをありに変更したいなら、
$table->string('age')->nullable()->change();
と入力すればいいって事です。

記入したら、ファイルを上書き保存し、

php artisan migrate

のコマンドを打ち、Enterで完了です。

 

うまく変更できてるか、phpMyAdminなどで確認してみてください。

 

ねぇ、この追加、変更、削除ってさ、コマンド打たなくてもphpMyAdminからもできるよね?
うん、実はできるよ。まぁ、phpMyAdminからイジると、イジった履歴がmigrationファイルとして残らないから、PCからサーバーにmigrationファイルをアップロードした時に、サーバー側のデータベースにPC側と同じ設定が反映されないって事にはなるね。サーバー側のphpMyAdminでも訂正が必要になるよ。
Neby
そういうデメリットはあるんだね。

 

写真で血圧記録

  • この記事を書いた人

Neby

本を毎日多読しつつ、資産運用、プログラミング、心理学、ネットビジネススキルを猛向上中。貧富の差が広がる5年後、10年後に安心生活を送るためのお金のリテラシー、スキル、資産を一緒に作っていきましょう。

-PHP Laravel入門