我遇到了麻烦。当我在 Symfony 中执行 persist() 和 flush() 时,我得到这个:
执行"插入 INTO pedido (emissao, 总计, cliente_id) 值 (?, ?, ?, ?)' 带参数 ["2018-01-10", "100.00", "65c4002a-06e2-442b-b1da-61197f73ba3b"]: SQLSTATE[HY000]: 一般错误: 1364 字段"id"没有默认值
我的注释在所有实体中都是相同的,但是在这个实体中(特别是),Doctrine 无法创建自动 ID:
/**
* @var RamseyUuidUuid
*
* @ORMId
* @ORMColumn(type="uuid", unique=true)
* @ORMGeneratedValue(strategy="CUSTOM")
* @ORMCustomIdGenerator(class="RamseyUuidDoctrineUuidGenerator")
*/
protected $id;
由于字段 ID 是自动生成的,因此此错误似乎没有意义。我还有其他实体,例如 Pessoa,它们使用相同的注释可以正常工作。
我怎样才能强迫教义"理解"UUID指数?
Currenly Doctrine 不支持单个实体中的多个自动生成字段。如果有 2 个字段,Doctrine 将为最后一个字段生成值,并将第一个字段生成默认值(如果未指定,则null
)。
由于 Ramsey 使用静态方法来生成 UUID,因此您应该将其生成放在持久逻辑(管理器、处理程序或其他)或实体构造函数中的位置:
public function __construct()
{
$this->uuid = Uuid::uuid4()->toString();
}
并删除相应的注释:
* @ORMGeneratedValue(strategy="CUSTOM")
* @ORMCustomIdGenerator(class="RamseyUuidDoctrineUuidGenerator")
另一种解决方案
由于您的第二列使用数据库的自动增量功能(我假设您使用的是MySQL),因此您可以尝试:
- 删除此列上的生成器注释
- 使用
AUTO_INCREMENT
选项手动定义列定义(不可移植和笨拙的恕我直言):- http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#column
- https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html
您需要:
-
检查表
pedido
中的字段id
是否为自动递增主键。 -
将
VALUES (?, ?, ?, ?)
更改为VALUES (?, ?, ?)
以便仅插入 3 个值