Doctrine没有创建自动UUID

时间:2018-01-10 15:06:47

标签: php sql symfony doctrine-orm doctrine

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

  

执行'INSERT INTO pedido'时发生异常(emissao,   total,cliente_id)VALUES(?,?,?,?)'with params [“2018-01-10”,   “100.00”,“65c4002a-06e2-442b-b1da-61197f73ba3b”]:SQLSTATE [HY000]:常规错误:1364字段'id'没有默认值

我的注释在所有实体中都是相同的,但在这个(具体)中,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索引?

2 个答案:

答案 0 :(得分:6)

Currenly 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选项手动定义列定义(非便携和hacky IMHO):
    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 :(得分:-1)

你需要:

  1. 检查,表id中的字段pedido是自动增加的主键。

  2. VALUES (?, ?, ?, ?)更改为VALUES (?, ?, ?)因为您只插入3个值