我需要实体的ID,我正在做一个PostPersist调用。下面这些应该可以工作。我var_dump和我确实得到ID和实际上$this->路径是正确的调试时。但是,数据库中的结果为空。就好像PostPersist从未发生过一样。这有什么不对吗?此外,@HasLifecycleCallbacks在我的实体类的顶部注释。
/**
* @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;
}
这是因为在PostPersist中,EntityManager不会刷新对实体所做的任何更改。
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html postupdate-postremove-postpersist
如果您想避免对实体进行后续更新,例如:
//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列改变,然后有原则处理,所以它的下一个ID将是可预测的,然后使用prePersist
做你想做的。