ネビ活 | ネットビジネス生活

ネットxお金のスキルを作り、未来永劫豊かに暮らす事を目指すサイト

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

更新日:

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

 

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

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

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

 

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

Laravelって稼げるの?独学?スクール?高給を稼ぐためにどうするべきか教えます。

 

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
そういうデメリットはあるんだね。

 

ところで、あなたはなぜLaravelを今学び始めたんでしょうか?

稼げると聞いたから?

どれくらい上達すれば稼げるのか?本当にそんな高給を稼げるのかの現実を知ってますか?

詳しくは下の記事に本音の裏事情を書いてるので参考にしてくださいね。

Laravelって稼げるの?独学?スクール?高給を稼ぐためにどうするべきか教えます。

  • この記事を書いた人

Neby

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

-PHP Laravel入門

Copyright© ネビ活 | ネットビジネス生活 , 2020 All Rights Reserved.