我有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
。我该怎么办?
答案 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());
}