在持久化+刷新之后,doctrine生成的标识符怎么样?

时间:2016-12-30 10:30:11

标签: php doctrine-orm symfony

我不理解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));
}
}

1 个答案:

答案 0 :(得分:1)

  

失败刷新操作后,您无法依赖生成的标识符不可用

所以,不是真的,如果您的flush成功完成,您的ID将可用且可以安全使用。

一个例外是使用交易时。如果我没有弄错,flush也会创建一个有效的ID,但未能正确提交事务会导致记录被删除。

希望这会有所帮助......