Symfony原则不能更改列';id';

Symfony原则不能更改列';id';,symfony,doctrine-orm,Symfony,Doctrine Orm,我正在使用Symfony 2.7开发AngularJS应用程序,我有一个无法使用的注册表,我无法在数据库中注册新用户。 第一个错误发生了 [Doctrine\DBAL\DBALException] 请求的未知数据库类型enum,条令\DBAL\Platforms\MySqlPlatform 可能不支持 因此,我通过添加以下内容编辑了配置文件: mapping_types: enum: string 我执行了: php app/console doctrine:schema:u

我正在使用Symfony 2.7开发AngularJS应用程序,我有一个无法使用的注册表,我无法在数据库中注册新用户。 第一个错误发生了

[Doctrine\DBAL\DBALException]
请求的未知数据库类型enum,条令\DBAL\Platforms\MySqlPlatform 可能不支持

因此,我通过添加以下内容编辑了配置文件:

mapping_types:
        enum: string
我执行了:

php app/console doctrine:schema:update --force
我收到了以下错误消息:

    [Doctrine\DBAL\Exception\DriverException]
执行“ALTER TABLE user CHANGE id INT AU”时发生异常
要增加非空值…

解决文档中问题的两种解决方案:

第一个更简单:

您可以将枚举映射到varchar。您可以注册MySQL枚举以映射到Doctrine varchars。这样,条令总是将enum分解为varchars条令。当使用SchemaTool更新命令时,它甚至可以正确地检测到这种匹配

<?php
$conn = $em->getConnection();
$conn->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');

<?php
/** @Entity */
class Article
{
    const STATUS_VISIBLE = 'visible';
    const STATUS_INVISIBLE = 'invisible';

    /** @Column(type="string") */
    private $status;

    public function setStatus($status)
    {
        if (!in_array($status, array(self::STATUS_VISIBLE, self::STATUS_INVISIBLE))) {
            throw new \InvalidArgumentException("Invalid status");
        }
        $this->status = $status;
    }
}
<?php
/** @Entity */
class Article
{
    /** @Column(type="string", columnDefinition="ENUM('visible', 'invisible')") */
    private $status;
}