【外部キーの新規追加】
(例)
Usersテーブルに外部キー設定したoffice_idカラムを追加したい。
①追加ファイル作成コマンド
php artisan make:migration add_office_id_column_to_users
何をするのか カラム名 追加するテーブル名
②作成したファイルの中身
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->foreignId('office_id')->nullable()->after('id')->comment('事務
追加するカラム名
所')->constrained('offices')->onDelete('set null'※);
紐づけるテーブル名の複数形
});
}
※
->onDelete('cascade'):外部キー設定先のテーブルレコードが削除された場合、このレコードも削除される設定
↑例えるとofficeテーブルのid2のレコード消えたら、userテーブルのoffice_id:2のレコードも一緒に消える
->onDelete('set null'):外部キー設定先のテーブルレコードが削除された場合、このテーブルのカラムがnullになる
↑例えるとofficeテーブルのid2のレコード消えたら、userテーブルのoffice_id:2がnullになる
->onUpdate('cascade'):外部キー設定先のテーブルレコードが更新された場合、このテーブルの外部キーカラムも更新されたデータになる
↑例えるとofficeテーブルのid2のレコードがid4になったら、userテーブルのoffice_idも4になる
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropForeign('users_office_id_foreign'); // 外部キーの削除
追加したテーブルの複数形_カラム名_foreign
$table->dropColumn('office_id'); // カラムの削除
カラム名
});
}
※このdownの外部キーの削除とカラムの削除は$table->dropForeignIdFor()1行のコードでいける。
【既存カラムを外部キーへ変更】
(例)普通のstring型の既存のカラムに外部キーをつける
※新規外部キーカラム作成時は、その参照先テーブルを->constrained('departments')で設定するが、外部キーをつけるだけの場合は使えないから
->references('参照先カラム名')->on('参照先テーブル名複数形')
を使う
(例)既存の外部キーカラムの設定条件を変更する
【カラム名の変更】
public function up(): void
{
Schema::table('companies',function(Blueprint $table){
$table->renameColumn
('basic_submit_pension_office_id','basic_submit_pension_office');
変更後のカラム名 変更前のカラム名
});
}
public function down(): void
{
Schema::table('companies',function(Blueprint $table){
$table->renameColumn
('basic_submit_pension_office','basic_submit_pension_office_id');
変更前のカラム名 変更後のカラム名
});
}
【やり直す】
全マイグレーションファイル確認、やり直したい時はfileのexportからデスクトップ等に今のデータを保存した上で、
php artisan migrate:fresh
を叩く。するとDBの全てのテーブル、カラムが一度削除されてからUPが実行される。
ちなみに、その後
php artisan migrate:rollback
すると、全てのファイルのdownが実行される。