我需要实体的ID,我正在进行PostPersist通话。以下应该有效。我var_dump和我确实得到了ID,实际上$ this->路径在调试时是正确的。但是,数据库中的结果为null。好像PostPersist从未发生过。这有什么问题?此外,@ HasLifecycleCallbacks在我的Entity类的顶部注释。
/**
* @ORM\PostPersist
* @ORM\PreUpdate
*/
public function setPathFromParent(\Doctrine\ORM\Event\LifecycleEventArgs $e)
{
$newTermData = $e->getEntity();
$id = $newTermData->getId();
if($this->getParentTermData() != '')
$this->path = $this->getParentTermData()->getPath() . '.' . $this->getId();
else
$this->path = $id;
}
答案 0 :(得分:-1)
这是因为在PostPersist中,EntityManager不会刷新对实体所做的任何更改。
如果您想避免对实体进行后续更新,请执行以下操作:
//Controller or other place to get
$newTermData = //create it some how
$em->persist($newTermData);
$em->flush();
$id = $newTermData->getId();
if($newTermData->getParentTermData() != '')
$newTermData->path = $newTermData->getParentTermData()->getPath() . '.' . $newTermData->getId();
else
$newTermData->path = $id;
$em->flush($newTermData);
然后你可以改变使用自动递增的ID列,然后使用doctrine句柄来预测下一个ID是什么,然后使用prePersist
来做你想要的。