在哪里放置数据一致性逻辑?

时间:2015-10-02 08:24:23

标签: php symfony doctrine-orm

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

用户role是“C”公司“D”部门的经理,如果他们有U1role="manager"company="C"。但是一个部门只能有一个经理,所以我需要以某种方式维持这个限制。

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

维护这样一个数据一致性逻辑的最佳方法是什么(以及将它放在哪里,doctrine lc事件?)? (我知道逻辑非常奇怪,但我不能改变它。)

1 个答案:

答案 0 :(得分:0)

似乎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
    }
}