首页 > 解决方案 > 如何在 Laravel 中禁用枚举检查

问题描述

我想在表中添加另一个新的枚举列,但无法迁移,因为它说列已经存在。

移民

class DesignationColumnNullableInUserTable extends Migration
{
    public function __construct()
    {
        \Illuminate\Support\Facades\DB::getDoctrineSchemaManager()
        ->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
        Type::addType('enum', \Doctrine\DBAL\Types\StringType::class);
    }

    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->enum('designation', ['Lawyer', 'Freelancer', 
                'Corporate secretary', 'Immigration Consultant'])
             ->nullable()->change();
        });
    }

    public function down()
    {
        Schema::table('user', function (Blueprint $table) {
            $table->dropIfExists('designation');
        });
    }
} 

我还在另一个使用外键的迁移中进行了一些更改。

\Illuminate\Support\Facades\DB::getDoctrineSchemaManager()
    ->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');

如何为枚举检查解决此问题?

标签: databaselaraveldatabase-migration

解决方案


Laravel 不支持修改枚举列,因此请改用原始语句:

public function up() {
    DB::statement("ALTER TABLE users MODIFY COLUMN designation ENUM('Lawyer', 'Freelancer', 'Corporate secretary', 'Immigration Consultant')");
}

对于 MySQL,您应该能够使用以下内容:

// up
DB::statement("ALTER TABLE users CHANGE designation designation ENUM('Lawyer', 'Freelancer', 'Corporate secretary', 'Immigration Consultant')");

推荐阅读