2

我有Post实体。它具有生命周期回调@ORM\HasLifecycleCallbacks代码:

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

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

我想更新Post#updatedAt什么时候Comment更新。我该怎么做?

4

3 回答 3

1

在这个文档页面的最底部,有一些关于如何适应更复杂的东西的建议:http: //symfony.com/doc/current/doctrine/lifecycle_callbacks.html

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

于 2017-10-05T17:14:29.847 回答
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());
}
于 2013-08-04T19:38:23.613 回答
-1

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

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

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

于 2013-08-04T19:33:12.353 回答