我有一个User
实体,与Many-To-One
实体有Company
关系,与Many-To-Many
实体有Department
关系,并且还有{{1} }}字段。
用户role
是“C”公司“D”部门的经理,如果他们有U1
,role="manager"
,company="C"
。但是一个部门只能有一个经理,所以我需要以某种方式维持这个限制。
当使用departments=["D", ...]
,U2
,role="manager"
创建新用户company="C"
时,我必须从departments=["D", ...]
集合中删除“D”部门。
维护这样一个数据一致性逻辑的最佳方法是什么(以及将它放在哪里,doctrine lc事件?)? (我知道逻辑非常奇怪,但我不能改变它。)
答案 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
}
}