我遇到了麻烦。当我在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索引?
答案 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),您可以尝试:
AUTO_INCREMENT
选项手动定义列定义(非便携和hacky IMHO):
答案 1 :(得分:-1)
你需要:
检查,表id
中的字段pedido
是自动增加的主键。
将VALUES (?, ?, ?, ?)
更改为VALUES (?, ?, ?)
因为您只插入3个值