Laravelのmigration(マイグレーション)で、作成したテーブルに対して、カラムの追加、変更、削除などを行います。前回は同機能でテーブルの作成までを行いました。マイグレーションについての基本や再現環境等含め、前回の続きとして進めていきますので、必要な場合はそちらを確認してください。previous:Laravelのマイグレーション&スキーマビルダでDBのテーブルやカラムを作成する尚、Laravelのバージョンに関しては5.7/5.6/5.5/5.4/5.3で動作確認済みです。マイグレーションでデータベースを管理し開発を行う開発を続けていくと、テーブルにカラムを追加する必要があったり、初期で決めたカラムの定義を変更する(カラム名の変更・最大文字長の変更など)必要も出てくる場合があります。その場合にも、マイグレーションで構築が可能です。その場合は、先ほど作ったファイルを編集するのではなく、新たにマイグレーションファイルを作成し、都度スキーマビルダで記述していきます。元のファイルを修正するのではなく、何故わざわざ新しくマイグレーションファイルを作成するのかというと、現在投入しているデータベースのデータをそのままにカラム追加を行える。いう事に利点があります。そもそもマイグレーションとは、データベースのバージョン管理のような役割があり、一度マイグレーションを実行し構築したテーブルに関して改めて同じマイグレーションを実行する場合は、そのテーブルを一度削除(drop)してから再構築するという流れになっています。(ロールバックからの、マイグレーション再実行。いう手順)という事は、それまで入っていたデータ自体は一緒に消失するという事になりますので、またデータを入れ直さなければなりません。これは大きな手間になります。これが1人で開発を行っている場合はまだ良いですが、もしチームで開発をしていて、各々、データのインサートをテストで行っていた場合などは、各々、入っているデータの内容は異なるはずです。関わらず、誰かの開発でカラム追加や変更が発生したとしたら、チーム全員がテストデータを入れ直さなければならない状況が生まれてしまうからです。機能開発時にプログラムテストでインサートされたデータなんて、初期投入用データには入っているはずがありません(都度作るなら別ですが)という事なので、カラム変更や追加が発生した際には、新たにマイグレーションを作成し、そこへ記述していきます。実はLaravelでは、デフォルトのままではカラム変更のマイグレーションは行えません。新たにパッケージを導入する必要があります。(とはいえ公式のアナウンスなので安心の手順です)Laravelルートディレクトリへ移動して、「doctrine/dbal」を依存パッケージとして追加します。successfully.実行結果については、導入した時期によってバージョンの違いなどが出ると思うので細かい事は抜きにして、エラーを吐いていなければとりあえずOKです。ここで一度、laravel/composer.jsonを開いてdoctrine/dbalが導入されたかを確認します。"^1.0"},導入されている事を確認できました。カラム変更用マイグレーションファイルの生成パッケージの導入が完了したら、マイグレーションファイルの生成を行っていきます。前回のマイグレーション生成時には、本を管理する「books」テーブルを作成しましたので、今回はここに、「販売数(何冊売れたか)」のカラムを追加してみようと思います。テーブル生成時のコマンドとは微妙に違うので注意してください。Laravelルートディレクトリへ移動して、以下のartisanコマンドを叩きます。--table=[テーブル名]としてコマンドを組み立ててください。この時に注意したいのが、前回も言った通りマイグレーションファイル名はそのままクラス名になりますので、分かりやすい名前をつけましょう。今回の場合は「add_column_sales_books_table」なので、クラス名はAddColumnSalesBooksTableというクラス名で生成されます。オプションもテーブル生成時のものと異なっています。「--create=」が「--table=」になっている事に気が付いたでしょうか?Schemaファサードによって実行されるメソッドを「table」にて生成するという意味ですが、まあ細かい事は抜きにして、お約束としてつけましょう。マイグレーションファイルが生成されました。配下に生成されています。ココマイグレーションファイルの確認とスキーマビルダ記述それでは、生成したマイグレーションファイルを開いてスキーマビルダにて追加カラムを記述していきますが、まずはファイルを確認します。}}テーブル生成の時と一見変わりないように見えますが、Schemaクラスのメソッドがcreateからtableに変更されています。ここにカラム追加の記述を行っていきますが、upメソッドにはカラム追加の記述を、downメソッドにはロールバック時の処理(無かった事にする処理)をスキーマビルダで記述します。こんな感じになりました。続いてdown()メソッドは$table->dropColumn('sales');カラム「sales」を削除(drop)するという意味になっています。今回はカラム追加を行いましたが、カラムの変更・削除等もここに何を記述するかで行えますので、各自必要な処理を記述してください。マイグレーションを実行してカラムを追加するそれではマイグレーションを実行してみましょう。Laravelのルートディレクトリへ移動し、以下のartisanコマンドを叩きます。2018_11_24_183257_add_column_sales_books_table実行が完了したら、実際にカラムが追加されているかを確認してみましょう。|+------------+------------------+------+-----+-------------------+-----------------------------+カラムが意図した通りに追加されている事が確認できました。ロールバックを行う行ったマイグレーションをロールバック(無かった事にする)も出来ます。その場合には、down()メソッドが実行されます。今回の場合には、salesカラムが削除(drop)されるという事になります。ロールバックには「step」というオプションがあり、どれだけのマイグレーションを元に戻したいかを設定できます。オプションを付けなければ、単純に、最後に行ったマイグレーション実行がロールバックされます。試しに、今行ったマイグレーションをロールバックしてみます。2018_11_24_183257_add_column_sales_books_tableロールバックが実行されました。データベースを確認してみます。|+------------+------------------+------+-----+-------------------+-----------------------------+ロールバックが実行され、最後に行ったマイグレーションであるsalesカラムの追加が無かった事(追加する前に戻る)になりました。まとめいかがでしたでしょうか?今回はマイグレーションにてカラムの変更を行いました。次回はシーティングという機能を使い、マイグレーション時に初期データを投入する手順を解説します。SESを使ってAPIメール送信を行う(Mailableクラス&SimpleEmailService)2019.12.3MySQL8.0.16で追加されたCHECK制約を試してみる。RitoLaboこのサイトについて利用規約プライバシーポリシ。