テーブル作成時の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 テーブルに対して。
という意味があります。
理由は、
1. 他のテーブルでも同じ名前のカラムを作る事がよくある。その時、クラス名が同じになるのでバグる可能性がゼロではない。
2.ファイル名でパッとどのテーブルに追加した奴なのかが分からない。
そして、必ず --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()の方にも、カラム作成時に書いたコードを書いておくと、後日、もしロールバックという前の状態に戻す操作を行った際、消したカラムが戻ります。
ファイルを上書き保存したら、
php artisan migrate で削除完了です。
php artisan migrate:rollback
このコマンドを打てば、前のファイルのdownに書かれたコマンドが実行されて、元に戻るよ。元に戻ったら、戻ったファイル以降の日付のファイルはPC内の別のフォルダに移動するなり、消すなりしないと、次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
みたく、変更すれば、新しいファイルとして認識させる事も可能だよ。(一人で作業してる分にはいいけど、共同作業の場合は、どこをイジったかの履歴が分かりづらくなるのでやらない事。)
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などで確認してみてください。