如何在Symfony中实现Doctrine NotifyPropertyChanged

时间:2016-06-24 12:23:30

标签: symfony doctrine-orm listener

有谁能告诉我如何在Symfony中实现Doctrine NotifyPropertyChanged? 我已在实体中实现此代码,该实体将通知更改。但是如何在另一个实体中为这些更改添加监听器?

我的意思是我想要处理这种情况:实体书与作者有一个共同之处。当在某个部分作者中更改某些内容时,我想在书籍实体中对其做出反应。所以我在Author中实现了NotifyPropertyChanged。在setter中我调用通知,但是如何将这个监听器添加到Book实体?

1 个答案:

答案 0 :(得分:1)

看起来你的用例有点不同:ǸotifyPropertyChanged`可以告诉Doctrine你的实体发生了变化。默认情况下,Doctrine2将迭代所有属性并进行比较(这样就是“自动”)。 IMO,放弃它。只有我现在看到的用例是一些非常具体的情况,使用默认策略会花费太多。

另一种方法是使用一些lifecycle events。从preUpdatepostUpdate更改其他实体非常难以理解。 Doctrine已经开始对“变更集”进行计算,对DB持续存在什么,并且没有简单的方法可以向其添加另一个实体。

由于您可以在setter中编写一些代码,因此更简单的路径是这样的:

class Author
{
    public function setName($name)
    {
         // ...

         // for each setter, call onChanged
         $this->onChange();
    }

    private function onChange()
    {
         foreach ($this->books as $book) {
             // maybe call some method on your books, like onAuthorChanged() ?
         }
    }
}