原则2 postPersist调用不起作用


Doctrine 2 postPersist call does not work

我需要实体的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做你想做的。