PHP

Laravel enum型、外部制約があるマイグレーション

Laravel

 

enum型対策

    public function __construct()
    {
        DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
    }

 

 

外部キー制約対策

            //外部キー制約を一旦無効化
            Schema::disableForeignKeyConstraints();

            Schema::table(self::TABLE_NAME, function (Blueprint $table) {
                $table->bigInteger('member_id')->unsigned()->nullable()->default(null)->change();
            });

            //外部キー制約を有効化
            Schema::enableForeignKeyConstraints();

 

 

 

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

class ModifyProfilesMemberIdNonNull extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    const TABLE_NAME = "member_profiles";

    public function __construct()
    {
        DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
    }

    public function up()
    {
        DB::beginTransaction();
        try {
            //外部キー制約を一旦無効化
            Schema::disableForeignKeyConstraints();

            Schema::table(self::TABLE_NAME, function (Blueprint $table) {
                $table->bigInteger('member_id')->unsigned()->nullable()->default(null)->change();
            });

            //外部キー制約を有効化
            Schema::enableForeignKeyConstraints();
        } catch (\Exception $e) {
            DB::rollback();
            throw $e;
        }
        DB::commit();
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        DB::beginTransaction();
        try {
            //外部キー制約を一旦無効化
            Schema::disableForeignKeyConstraints();

            Schema::table(self::TABLE_NAME, function (Blueprint $table) {
                $table->bigInteger('member_id')->unsigned()->nullable(false)->change();
            });

            //外部キー制約を有効化
            Schema::enableForeignKeyConstraints();
        } catch (\Exception $e) {
            DB::rollback();
            throw $e;
        }
        DB::commit();
    }
}

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)