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索引?
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),您可以尝试:
AUTO_INCREMENT选项手动定义列定义(非便携和hacky IMHO):