Doctrine没有创建自动UUID

Lui*_*ves 3 php sql doctrine symfony doctrine-orm

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

使用参数["2018-01-10","100.00","65c4002a-06e2-442b-b1da"执行'INSERT INTO pedido(emissao,total,cliente_id)VALUES(?,?,?,?)'时发生异常-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;
Run Code Online (Sandbox Code Playgroud)

由于字段ID是自动生成的,因此该错误似乎毫无意义.我有像Pessoa这样的其他实体,它们使用相同的注释工作正常.

我如何强迫Doctrine"理解"UUID索引?

Vad*_*man 7

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

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

public function __construct()
{
    $this->uuid = Uuid::uuid4()->toString();
}
Run Code Online (Sandbox Code Playgroud)

并删除相应的注释:

* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")
Run Code Online (Sandbox Code Playgroud)

另一种方法

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