【问题标题】:Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it. Symfony请求的未知数据库类型枚举,Doctrine\DBAL\Platforms\MySQL57Platform 可能不支持它。 Symfony
【发布时间】:2019-02-06 06:35:43
【问题描述】:

我创建了一个新的 symfony4 项目。使用php bin/console make:user 创建用户实体,然后尝试使用php bin/console make:migration 进行迁移。但是随后弹出错误

在 AbstractPlatform.php 第 434 行:

请求的未知数据库类型枚举, Doctrine\DBAL\Platforms\MySQL57Platform 可能不支持。

奇怪的是 User 实体没有任何 enum 类型,而是有一个 json 角色列,我想这就是原因。

 /**
 * @ORM\Column(type="json")
 */
 private $roles = [];

我已经为 laravel 的类似问题看到了一些答案,但不知道如何在 symfony4 中修复它。

【问题讨论】:

  • 你能说出你的 symfony 版本吗?正如@LeshaZ 所写,我也没有问题,但我使用 MariaDB!
  • 我使用的是 symfony 4.2,在我的 laravel 应用程序中根本没有出现这个问题

标签: php symfony doctrine-orm


【解决方案1】:

无法重现您的问题。但无论如何你都可以在学说.yaml中设置枚举类型

doctrine:
    dbal:
       .....
        mapping_types:
            enum: string

【讨论】:

  • 确实解决了错误,但数据库只包含一个空数组 [] 而不是 [ROLE_USER]
  • 您能否分享一个如何添加角色的示例
  • 谢谢,我总是忘记将我的枚举添加到教义.yaml中
【解决方案2】:

要解决此问题,您可以在迁移时注册该类型映射:

DB::connection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');

另外,您可以在app\Providers\AppServiceProvider.php注册。

    public function boot() {
        // ...

        DB::connection()
            ->getDoctrineSchemaManager()
            ->getDatabasePlatform()
            ->registerDoctrineTypeMapping('enum', 'string');

        // ....
    }

来源:https://github.com/doctrine/dbal/issues/3161#issuecomment-542814085

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2016-01-13
    • 2020-10-26
    • 2021-01-22
    相关资源
    最近更新 更多