gpt4 book ai didi

php - Doctrine 不创建自动 UUID

转载 作者:可可西里 更新时间:2023-11-01 00:28:58 26 4
gpt4 key购买 nike

我遇到了麻烦。当我在 Symfony 中执行 persist() 和 flush() 时,我得到了这个:

An exception occurred while executing 'INSERT INTO pedido (emissao, total, cliente_id) VALUES (?, ?, ?, ?)' with params ["2018-01-10", "100.00", "65c4002a-06e2-442b-b1da-61197f73ba3b"]: SQLSTATE[HY000]: General error: 1364 Field 'id' doesn't have a default value

我的注解在所有实体中都是一样的,但在这个(特别是)中,Doctrine 不能创建自动 id:

/**
* @var \Ramsey\Uuid\Uuid
*
* @ORM\Id
* @ORM\Column(type="uuid", unique=true)
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")
*/
protected $id;

由于字段 ID 是自动生成的,所以这个错误似乎没有意义。我还有其他实体,例如 Pessoa,它可以使用相同的注释正常工作。

如何强制 Doctrine“理解”UUID 索引?

最佳答案

目前 Doctrine 不支持单个实体中的多个自动生成字段。如果有 2 个字段,Doctrine 将为最后一个字段生成值,并使用默认值保留第一个字段(如果未指定,则为 null)。

由于 Ramsey 使用静态方法生成 UUID,因此您应该将其生成放置在持久性逻辑所在的位置(管理器、处理程序或其他)或实体的构造函数内:

public function __construct()
{
$this->uuid = Uuid::uuid4()->toString();
}

并去掉对应的注解:

* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")

另一种解决方案

由于您的第二列使用了数据库的自动递增功能(我假设您使用的是 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

关于php - Doctrine 不创建自动 UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48190332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com