不创建自动 UUID 的学说



我遇到了麻烦。当我在 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),因此您可以尝试:

  1. 删除此列上的生成器注释
  2. 使用AUTO_INCREMENT选项手动定义列定义(不可移植和笨拙的恕我直言):
    1. http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#column
    2. https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html

您需要:

  1. 检查表pedido中的字段id是否为自动递增主键。

  2. VALUES (?, ?, ?, ?)更改为VALUES (?, ?, ?)以便仅插入 3 个值

相关内容

  • 没有找到相关文章

最新更新