我正在使用Symfony 2.7处理AngularJS App,我有一个无效的注册表单,我无法在数据库中注册新用户。 发生了第一个错误
[Doctrine\DBAL\DBALException]
请求未知的数据库类型枚举,Doctrine \ DBAL \ Platforms \ MySqlPlatform 可能不会支持它。
所以我通过添加:
编辑了我的配置文件mapping_types:
enum: string
我执行了:
php app/console doctrine:schema:update --force
我收到了以下错误消息:
[Doctrine\DBAL\Exception\DriverException]
执行'ALTER TABLE user CHANGE id id INT AU时发生异常 TO_INCREMENT非空......
答案 0 :(得分:0)
解决文档问题的两种解决方案:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/cookbook/mysql-enums.html。
第一个更容易:
您可以将ENUM映射到varchars。您可以注册MySQL ENUM以映射到Doctrine varchars。这样,Doctrine总是将ENUM解析为Doctrine varchars。使用SchemaTool更新命令时,它甚至会正确检测到此匹配。
<?php
$conn = $em->getConnection();
$conn->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
在这种情况下,您必须确保只有数据库中枚举的每个varchar字段才会传递允许的值。您可以在实体中轻松执行此操作:
<?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;
}
}
如果要使用columnDefinition属性通过Doctrine Schema-Tool主动创建枚举。
<?php
/** @Entity */
class Article
{
/** @Column(type="string", columnDefinition="ENUM('visible', 'invisible')") */
private $status;
}