Laravelでデータベースのカラムの追加・カラム名変更・削除・nullable()等の属性変更をする方法を解説します。
データベースを直接編集してしまうとLaravel上での処理と食い違いが生じるので、キケンです。
面倒ですがマイグレーションファイルを作り、Laravel上でファイルを設定をして、マイグレートを実行していきましょう。
流れとしては、次の3ステップです。
- コマンド入力
- マイグレーションファイルに入力
- マイグレート実行
それぞれの処理を解説していきますね。
なおLaravelでマイグレーションを行って新たにテーブルを作る方法は、下記にて分かりやすく解説しています。併せて参考にしてください。
カラム属性や名前の変更前にDBALドライバーをインストール
*こちらはLaravel10では不要になっています。詳しくはこちらご覧ください。
カラム名や属性変更を行うには、最初に DBALドライバーをインストールしましょう。
次のようにコマンドをいれます。
1 |
composer require "doctrine/dbal:2.*" |
インストールが完了すると、次の画面が表示されます。
このドライバーをインストールせずに処理を進めると、下記のようなエラーがでます。
カラム追加のためのマイグレーション
ではまず、カラム追加のためのマイグレーションについて説明します。
①マイグレーションファイル作成
下記コマンドにより、マイグレーションファイルを作ります。【カラム名】には追加したいカラム名を入れておくと分かりやすいです。
【テーブル名】には、カラムを追加するテーブルの名前を入れましょう。
「add_column_カラム名_to_テーブル名_table」の部分はお好きなように変更可能です。
1 |
php artisan make:migration add_column_カラム名_to_テーブル名_table --table=テーブル名 |
Created Migration と出たら成功。
database/migrationsにマイグレーションファイルができています。
② 追加するカラム情報入力
マイグレーションファイルの public function up() に追加するカラムの情報を入力します。
このときpublic function down()にも、下記のように dropColumnの設定をいれておきましょう。ここにデータがないと、削除するときにエラーになります。
このとき、もしカラムを追加する場所に指定があれば、 次のようにします。
1 |
$table->unsignedBigInteger('division_id')->after('id'); |
上記のようにすると、id カラムのすぐ後ろに新しいカラムができます。
③マイグレート実行
最後にマイグレートを実行して完了です。
1 |
php artisan migrate |
カラム名を変更するためのマイグレーション
次にカラム名を変えたい時について、説明します。
①マイグレーションファイル作成
カラム名を変更するためのコマンドを入力します。
今回は addressesテーブル上のplayer_idをworker_idに変更します。次のようにいれます。
1 |
php artisan make:migration rename_player_id_to_worker_id_on_addresses_table --table=addresses |
*rename_player_id_to_worker_id_on_addresses_table の部分の書き方は、変更してもOKです。
実行するとdatabase/migrationsにマイグレーションファイルができます。
② 変更するカラム情報入力
マイグレーションファイルのpublic fucntion up() に、リネーム情報を書き加えます。
1 |
$table->renameColumn('player_id', 'worker_id' ); |
public function down()には、削除するときの処理を書き加えます。
1 |
$table->renameColumn('worker_id', 'player_id'); |
ファイルはこのようになります。
③マイグレート実行
コマンドでマイグレートを実行して完了
1 |
php artisan migrate |
カラム削除のためのマイグレーション
次は、カラム削除のためのマイグレーションについて説明します。
①マイグレーションファイル作成
カラムを削除したいときは、drop_columnを使います。
emailsテーブル上のaddressカラムを削除したい場合、次のようにコマンドを打ちます。
1 |
php artisan make:migration delete_address_from_emails_table --table=emails |
*delete_address_from_emails_tableの部分の書き方は変えてもOKです。
Created Migration と出たら成功。
② 削除するカラム情報入力
database/migrationsからマイグレーションファイルを開きます。
実行するとdatabase/migrationsにマイグレーションファイルができます。
マイグレーションファイルのpublic fucntion up() に、削除するカラムの情報を書き加えます。
1 |
$table->dropColumn('address'); |
public function down()には、反対の処理を書き加えます。
今回の場合には削除を取り消す処理になるので、カラムを作成するときの情報を入力します。
1 |
$table->string('address'); |
ちょっとややこしいですが、ここ、大事です。
public function down には、public function upと逆の処理を入れる、と覚えておいてくださいね。
ファイルはこのようになります。
③マイグレート実行
マイグレートを実行して完了
1 |
php artisan migrate |
カラム属性を変更してnullable()にする場合のマイグレーション
カラム属性の変更方法も紹介しますね。
例として、nullable()という属性を追加する処理を解説します。
①マイグレーションファイル作成
カラムの属性を変更する場合は、changeを使います。
usersテーブル上のstripe_idカラムをnullable(null値OK)にしたい場合には、次のようにコマンドを打ちます。
1 |
php artisan make:migration change_stripe_id_to_nullable_to_user_table --table=users |
*change_stripe_id_to_nullable_to_user_table の部分の書き方は、変えてもOKです。
Created Migration と出たら成功。
② 属性を変更するカラム情報入力
database/migrationsからマイグレーションファイルを開きます。
実行するとdatabase/migrationsにマイグレーションファイルができます。
マイグレーションファイルのpublic fucntion up() に、属性変更の情報を書き加えます。
1 |
$table->string('stripe_id')->nullable()->change(); |
public function down()には、変更取り消しの処理を書き加えます。
1 |
$table->string('stripe_id')->nullable(false)->change(); |
ファイルはこのようになります。
③マイグレート実行
マイグレートを実行して完了
1 |
php artisan migrate |
さいごに
なおマイグレーションファイルを作成する際のカラム名については、好きな形で書いて大丈夫です。
下記の赤色のような部分です。
私は最初決まった書き方で書かなきゃいけないって思っていました!
大事なのはマイグレーションファイルの中のテーブル名と、変更を加えるカラムについての部分です。
なお、マイグレーションの処理でもしトラブルがあった場合は、とりあえず、ロールバックをして1回処理を戻してみるのが基本です。
1 |
php artisan migrate:rollback |
ロールバックの方法はこちらの記事で詳しく解説しています。
ロールバックで取消処理を行うと、そのテーブルに保存したデータも消えるので、ご注意を。
また今回の記事には入れ損ねてしまった【データ型の変更】についてですが、別の記事にまとめたので、良かったらこちらも併せて参考にしてくださいね。