我不理解doctrine documentation的一小部分内容。部分文档:
保证生成的实体标识符/主键 在下一次成功的冲洗操作之后可以使用 有问题的实体。您不能依赖生成的标识符 在调用persist后直接可用。反之亦然。 您不能依赖生成的标识符在a之后不可用 刷新操作失败。
这是否意味着如果我创建一个具有自动生成ID且persist
+ flush
该实体的实体,我无法将该ID发送给其他控制器?
有些想法:
public function testAction()
{
$fabulous = new User();
$fabulousForm = $this->get('form.factory')->create(FabulousType::class, $fabulous);
if($fabulousForm->isSubmitted() && $fabulousForm->isValid())
{
$fabulousId = $fabulousForm->getData()->getUser()->getId();
$em = $this->getDoctrine()->getManager()->persist($fabulous)->flush();
return $this->redirectToRoute('my_fabulous_route', array('user_id' => fabulousId));
}
}
答案 0 :(得分:1)
在失败刷新操作后,您无法依赖生成的标识符不可用。
所以,不是真的,如果您的flush
成功完成,您的ID将可用且可以安全使用。
一个例外是使用交易时。如果我没有弄错,flush
也会创建一个有效的ID,但未能正确提交事务会导致记录被删除。
希望这会有所帮助......