【问题标题】:How to implement Doctrine NotifyPropertyChanged in Symfony如何在 Symfony 中实现 Doctrine NotifyPropertyChanged
【发布时间】:2016-10-27 01:45:12
【问题描述】:

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

我的意思是我想处理这种情况:Entity Book 对 Authors 有 oneToMany。当特定作者中的某些内容发生更改时,我想在图书实体中对其做出反应。所以我在 Author 中实现了 NotifyPropertyChanged。在 setter 中我调用通知,但是如何将此侦听器添加到 Book 实体?

【问题讨论】:

    标签: symfony doctrine-orm listener


    【解决方案1】:

    看起来您的用例有点不同:ǸotifyPropertyChanged 有助于告诉 Doctrine 您的实体已更改。默认情况下,Doctrine2 将遍历所有属性并比较它们(所以这是“自动的”)。海事组织,放下它。我现在看到的唯一用例是一些非常具体的情况,使用默认策略会花费太多。

    另一种方法是使用一些lifecycle events。从preUpdatepostUpdate 更改其他实体非常困难。 Doctrine 已经开始计算“变更集”,将哪些内容持久化到 DB,并且没有简单的方法可以向其中添加另一个实体。

    既然你可以在设置器中编写一些代码,更简单的路径是这样的:

    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() ?
             }
        }
    }
    

    【讨论】:

    • 如此简单、漂亮、干净。非常感谢!!! :) 工作就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多