有谁能告诉我如何在Symfony中实现Doctrine NotifyPropertyChanged? 我已在实体中实现此代码,该实体将通知更改。但是如何在另一个实体中为这些更改添加监听器?
我的意思是我想要处理这种情况:实体书与作者有一个共同之处。当在某个部分作者中更改某些内容时,我想在书籍实体中对其做出反应。所以我在Author中实现了NotifyPropertyChanged。在setter中我调用通知,但是如何将这个监听器添加到Book实体?
答案 0 :(得分:1)
看起来你的用例有点不同:ǸotifyPropertyChanged`可以告诉Doctrine你的实体发生了变化。默认情况下,Doctrine2将迭代所有属性并进行比较(这样就是“自动”)。 IMO,放弃它。只有我现在看到的用例是一些非常具体的情况,使用默认策略会花费太多。
另一种方法是使用一些lifecycle events。从preUpdate
或postUpdate
更改其他实体非常难以理解。 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() ?
}
}
}