Laravelのマイグレーションでカラム追加、カラム名変更、カラム削除、属性変更を行う方法【Laravel入門講座】

Laravelデータベース

Laravelでデータベースのカラムの追加・カラム名変更・削除・nullable()等の属性変更をする方法を解説します。

データベースを直接編集してしまうとLaravel上での処理と食い違いが生じるので、キケンです。

面倒ですがマイグレーションファイルを作り、Laravel上でファイルを設定をして、マイグレートを実行していきましょう。

流れとしては、次の3ステップです。

  1. コマンド入力
  2. マイグレーションファイルに入力
  3. マイグレート実行

それぞれの処理を解説していきますね。

なおLaravelでマイグレーションを行って新たにテーブルを作る方法は、下記にて分かりやすく解説しています。併せて参考にしてください。

カラム属性や名前の変更前にDBALドライバーをインストール

*こちらはLaravel10では不要になっています。詳しくはこちらご覧ください。

 

カラム名や属性変更を行うには、最初に DBALドライバーをインストールしましょう。

次のようにコマンドをいれます。

インストールが完了すると、次の画面が表示されます。

Junko
Junko

このドライバーをインストールせずに処理を進めると、下記のようなエラーがでます。

Class ‘Doctrine\DBAL\Driver\PDOMySql\Driver’ not found

カラム追加のためのマイグレーション

ではまず、カラム追加のためのマイグレーションについて説明します。

①マイグレーションファイル作成

下記コマンドにより、マイグレーションファイルを作ります。【カラム名】には追加したいカラム名を入れておくと分かりやすいです。

【テーブル名】には、カラムを追加するテーブルの名前を入れましょう。

「add_column_カラム名_to_テーブル名_table」の部分はお好きなように変更可能です。

Created Migration と出たら成功。

database/migrationsにマイグレーションファイルができています。

② 追加するカラム情報入力

マイグレーションファイルの public function up() に追加するカラムの情報を入力します。

このときpublic function down()にも、下記のように dropColumnの設定をいれておきましょう。ここにデータがないと、削除するときにエラーになります。

このとき、もしカラムを追加する場所に指定があれば、 次のようにします。

上記のようにすると、id カラムのすぐ後ろに新しいカラムができます。

③マイグレート実行

最後にマイグレートを実行して完了です。

カラム名を変更するためのマイグレーション

次にカラム名を変えたい時について、説明します。

①マイグレーションファイル作成

カラム名を変更するためのコマンドを入力します。

今回は addressesテーブル上のplayer_idをworker_idに変更します。次のようにいれます。

*rename_player_id_to_worker_id_on_addresses_table の部分の書き方は、変更してもOKです。

実行するとdatabase/migrationsにマイグレーションファイルができます。

② 変更するカラム情報入力

マイグレーションファイルのpublic fucntion up() に、リネーム情報を書き加えます。

public function down()には、削除するときの処理を書き加えます。

ファイルはこのようになります。

③マイグレート実行

コマンドでマイグレートを実行して完了

カラム削除のためのマイグレーション

次は、カラム削除のためのマイグレーションについて説明します。

①マイグレーションファイル作成

カラムを削除したいときは、drop_columnを使います。

emailsテーブル上のaddressカラムを削除したい場合、次のようにコマンドを打ちます。

*delete_address_from_emails_tableの部分の書き方は変えてもOKです。

Created Migration と出たら成功。

② 削除するカラム情報入力

database/migrationsからマイグレーションファイルを開きます。

実行するとdatabase/migrationsにマイグレーションファイルができます。

マイグレーションファイルのpublic fucntion up() に、削除するカラムの情報を書き加えます。

public function down()には、反対の処理を書き加えます。

今回の場合には削除を取り消す処理になるので、カラムを作成するときの情報を入力します。

Junko
Junko

ちょっとややこしいですが、ここ、大事です。

public function down には、public function upと逆の処理を入れる、と覚えておいてくださいね。

ファイルはこのようになります。

③マイグレート実行

マイグレートを実行して完了

カラム属性を変更してnullable()にする場合のマイグレーション

カラム属性の変更方法も紹介しますね。

例として、nullable()という属性を追加する処理を解説します。

①マイグレーションファイル作成

カラムの属性を変更する場合は、changeを使います。

usersテーブル上のstripe_idカラムをnullable(null値OK)にしたい場合には、次のようにコマンドを打ちます。

*change_stripe_id_to_nullable_to_user_table の部分の書き方は、変えてもOKです。

Created Migration と出たら成功。

② 属性を変更するカラム情報入力

database/migrationsからマイグレーションファイルを開きます。

実行するとdatabase/migrationsにマイグレーションファイルができます。

マイグレーションファイルのpublic fucntion up() に、属性変更の情報を書き加えます。

public function down()には、変更取り消しの処理を書き加えます。

ファイルはこのようになります。

③マイグレート実行

マイグレートを実行して完了

さいごに

なおマイグレーションファイルを作成する際のカラム名については、好きな形で書いて大丈夫です。

下記の赤色のような部分です。

php artisan make:migration delete_address_from_emails_table –table=emails
じゅんこ
じゅんこ

私は最初決まった書き方で書かなきゃいけないって思っていました!

大事なのはマイグレーションファイルの中のテーブル名と、変更を加えるカラムについての部分です。

なお、マイグレーションの処理でもしトラブルがあった場合は、とりあえず、ロールバックをして1回処理を戻してみるのが基本です。

ロールバックの方法はこちらの記事で詳しく解説しています。

ロールバックで取消処理を行うと、そのテーブルに保存したデータも消えるので、ご注意を。

また今回の記事には入れ損ねてしまった【データ型の変更】についてですが、別の記事にまとめたので、良かったらこちらも併せて参考にしてくださいね。

Laravelデータベース Laravel入門講座

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる


Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
セミナーで、StripeやChatGPT連携、デバックなど実践スキルを分かりやすく学べます。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました