駆け出しエンジニアの勉強記録

アラフォー女の未経験すぎる業界での勉強記録

migrationファイルの操作

【外部キーの新規追加】
(例)
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型の既存のカラムに外部キーをつける

public function up(): void
{
Schema::table('companies', function (Blueprint $table) {
// string型から外部キーのbigint型にする
$table->unsignedBigInteger('basic_company_department_id')->change();
// 外部キーを設定(※)
$table->foreign('basic_company_department_id')->references('id')->on('departments')->onDelete('set null');
});
}

public function down(): void
{
Schema::table('companies', function (Blueprint $table) {
// 外部キーをはずす
$table->dropForeign('companies_basic_company_department_id_foreign');
// bigint型からstring型に戻す
$table->string('basic_company_department_id')->change();
});
}

※新規外部キーカラム作成時は、その参照先テーブルを->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が実行される。