Laravel 5.1 请求未知数据库类型枚举

2022-08-30 08:04:52

在运行php工匠迁移时,我得到了以下错误

[Doctrine\DBAL\DBALException]
未知数据库类型枚举请求,Doctrine\DBAL\Platforms\MySqlPlatform 可能不支持它。

如何解决此问题。

法典:

public function up() {
    Schema::table('blogs', function (Blueprint $table) {
        $table->string('wordpress_id')->nullable();
        $table->string('google_blog_id')->nullable()->change();
    });
}

答案 1

这是一个已知问题,如 Laravel 5.1 文档中所述。

注: 当前不支持重命名具有枚举列的表中的列

当您的数据库表中有一列时,就会发生这种情况。无论您是尝试重命名另一列,还是将另一列更改为 ,都会出现此错误。这是 一个问题。enumnullableDoctrine\DBAL

解决此问题的一个简单方法是在数据库迁移文件中添加此构造函数方法。

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

这会将所有列映射到 ,并且该列将接受任何字符串。ENUMVARCHAR()

这在Laravel 5.1和Laravel 5.3上对我有用。我希望这个错误可以很快修复。

感谢@Gmatkowski在 https://stackoverflow.com/a/32860409/1193201 的回答


答案 2

Laravel 5.1 官方文档指出:

注: 当前不支持重命名具有枚举列的表中的列。

如果您尝试更改另一列并不重要,如果该表包含任何不起作用的位置。这是一个教义DBAL问题。enum

作为解决方法,您可以删除列并添加新列(列数据将丢失):

public function up()
{
    Schema::table('users', function(Blueprint $table)
    {
        $table->dropColumn('name');
    });

    Schema::table('users', function(Blueprint $table)
    {
        $table->text('username');
    });
}

或使用 DB 语句:

public function up()
{
    DB::statement('ALTER TABLE projects CHANGE slug url VARCHAR(200)');
}

public function down()
{
    DB::statement('ALTER TABLE projects CHANGE url slug VARCHAR(200)');
}

资料来源:https://github.com/laravel/framework/issues/1186


推荐