2015-10-02 2 views
-1

У меня есть User сущности, с Many-To-One отношений с Company сущности, Many-To-Many отношением с Department лицом, а также имеет role поле.Где поставить логику согласованности данных?

U1 Пользователь является менеджером в отделе «D» в компании «C», если они есть role="manager", company="C", departments=["D", ...]. Но у одного отдела может быть только один менеджер, поэтому мне нужно как-то сохранить это ограничение.

Когда новый пользователь U2 создается с role="manager", company="C", departments=["D", ...], я должен удалить «D» отдел из U1.departments коллекции.

Каков наилучший способ для поддержания такой логики согласованности данных (и где ее поставить, доктрины lc-событий?)? (Я знаю, что логика довольно странная, но я не могу ее изменить).

ответ

0

Кажется, что Doctrine Entity Listener подходит для этого. Я в конечном итоге положить логику целостности данных в этом так: сущность

Пользователь:

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

Entity слушателя для объекта пользователя:

class UserListener 
{ 
    /** 
    * 
    * @ORM\PrePersist() 
    * @ORM\PreUpdate() 
    */ 
    public function reassignManagers(User $user, LifecycleEventArgs $event) { 
     // here all the data integrity stuff 
    } 
} 
Смежные вопросы