問題

テーブルに別の新しいenum列を追加したいが、列がすでに存在すると言われているので、移行できない。

移行

 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');
 

enumチェックのためにこの問題を解決するにはどうすればよいですか?

  ベストアンサー

Laravelはenum列の変更をサポートしていないので、代わりにraw文を使用します。

 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')");
 

  同じタグがついた質問を見る

databaselaraveldatabase-migration