Doctrine 2 postPersist call不起作用

时间:2014-03-27 22:15:06

标签: php symfony doctrine-orm doctrine

我需要实体的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;
}

1 个答案:

答案 0 :(得分:-1)

这是因为在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列,然后使用doctrine句柄来预测下一个ID是什么,然后使用prePersist来做你想要的。