首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel5.4迁移ENUM在MySQL中失败

Laravel5.4迁移ENUM在MySQL中失败
EN

Stack Overflow用户
提问于 2017-02-06 16:14:32
回答 2查看 6.9K关注 0票数 5

当我尝试应用我的迁移时,我会得到以下错误:

代码语言:javascript
运行
复制
[Doctrine\DBAL\DBALException]
Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it.

迁移是应用的,枚举列是在数据库上创建的,我得到了错误,所以我无法执行nexts迁移,因为这个迁移会抛出这个错误。

在服务器中,我的MySQL版本为5.7.17

这是我迁移的代码:

代码语言:javascript
运行
复制
class AddDocumentUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('document', 9)->unique();
            $table->enum('document_type', ['dni', 'nie', 'nif', 'cif']);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('document');
            $table->dropColumn('document_type');
        });
    }
}

(谢谢;)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-06 16:32:51

与laravel严格相关的信息可以找到这里。我强烈建议你读一下这条线。这不是一个拉拉的问题,它一直是一个错误的原则,从永远。

从上面的问题线程来看,用户henritoivar有一个有趣的想法。

引用这里的话:

这对我来说是可行的如果表上有枚举,并且要更改表中的任何列,则必须:

代码语言:javascript
运行
复制
public function up()
{
   Schema::getConnection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');

    Schema::table('jobs', function(Blueprint $table)
    {
        $table->decimal('latitude', 10, 6)->nullable()->change();
    });
}

我不知道这是否对你有用,但值得一试。

我本想把这个作为评论贴出来的,但它读起来太长了。

从官方理论文件中

原则2的类型系统由轻量组成,这意味着任何给定类型的实例都只有一个。此外,类型不包含状态。这两种假设都使得使用开发人员经常使用的Enum类型的MySQL变得相当复杂。当将enum与非调整的Doctrine 2应用程序一起使用时,由于未知的数据库类型“enum”,您将从Schema工具命令中获得错误。默认情况下,Doctrine不将MySQL枚举类型映射到Doctrine类型。这是因为Enum包含状态(它们的允许值),而Doctrine类型不包含。

从技术上讲,这是可以解决的。见这里。但这与拉勒维尔所赖以生存的symfony有严格的关系。

enums

重命名表中具有枚举类型列的任何列,当前不支持。

虽然这不是一个答案,但我希望它能给你指明正确的方向,或者至少给你一个关于你面临的问题的想法。

更多相关问题:

如何在Symfony 2/ Doctrine中启用ENUM

请求Laravel5.1未知数据库类型枚举

票数 12
EN

Stack Overflow用户

发布于 2017-02-06 18:47:55

在包含ENUM类型的迁移文件中,添加具有以下内容的构造函数方法:

代码语言:javascript
运行
复制
public function __construct() {
    // Register ENUM type
    DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
}

这在Laravel5.2对我来说很管用。您可以尝试将其添加到更高的级别,但这对我来说更快:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42072360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档