【问题标题】:Where to put data consistency logic?数据一致性逻辑放在哪里?
【发布时间】:2015-10-02 08:24:22
【问题描述】:

我有一个User 实体,与Company 实体有Many-To-One 关系,与Department 实体有Many-To-Many 关系,并且还有一个role 字段。

如果用户U1 拥有role="manager"company="C"departments=["D", ...],则该用户是“C”公司“D”部门的经理。但是一个部门只能有一个经理,所以我需要以某种方式保持这个限制。

当使用role="manager"company="C"departments=["D", ...] 创建新用户U2 时,我必须从U1.departments 集合中删除“D”部门。

维护这种数据一致性逻辑的最佳方法是什么(以及放在哪里,学说 lc 事件?)? (我知道逻辑很奇怪,但我无法改变它)。

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    看来Doctrine Entity Listener 很适合。我最终以这种方式将数据完整性逻辑放入其中:

    用户实体:

    /**
     * @ORM\Entity
     * @ORM\EntityListeners({"SomeNamespace\UserListener"})
     */
    class User
    {
     // some irrelevant to the question code here
    }
    

    用户实体的实体监听器:

    class UserListener
    {
        /**
         *
         * @ORM\PrePersist()
         * @ORM\PreUpdate()
         */
        public function reassignManagers(User $user, LifecycleEventArgs $event) {
          // here all the data integrity stuff
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-16
      • 2011-09-08
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2011-06-03
      相关资源
      最近更新 更多