学说:从另一个实体更新一个实体

时间:2013-08-01 07:32:43

标签: php doctrine-orm

我有Post个实体。它有Life Cycle Callbacks @ORM\HasLifecycleCallbacks和代码:

/**
 * @ORM\PrePersist
 * @ORM\PreUpdate
 */
public function updateTimestamps()
{
    $this->post->setUpdatedAt(new DateTime('now'));
}

我也有Comment个实体。 Comment有一个(或属于)Post

我希望在Post#updatedAt更新时更新Comment。我该怎么办?

3 个答案:

答案 0 :(得分:1)

在此文档页面的最底部,有一些关于如何容纳更复杂内容的建议:http://symfony.com/doc/current/doctrine/lifecycle_callbacks.html

简而言之,这些生命周期事件应该用于调用实体中的内部功能,而不是用于在不同实体之间进行通信。为此,您希望使用事件侦听器/订阅者。这篇文章与此问题非常相似,可能会提供更多指导:Doctrine2 Entity PrePersist - Update another entity

答案 1 :(得分:0)

你的LifecycleCallbacks应该在Comment实体中,因为你想从那里触发它。您的回调函数应如下所示:

public function updatePostTimeStamp() {
    $this->getPost()->setUpdatedAt(new \DateTime('now'));
}

用户创建或更新评论后,您需要在评论和帖子上执行persist()。然后你可以做一个flush(),一切都会被存储。更新帖子表需要post()上的持久性。

答案 2 :(得分:0)

/** @ORM\PrePersist @ORM\PreUpdate */
public function updatePostTimeStamp() {
    $this->post->setUpdatedAt(new \DateTime('now'));
    // you should get doctrine entity manager. e.g.
    // $em= MagicSingleton::getDoctrine()
    $em->persist($this->getPost());
}