2010-09-23 5 views
5

Есть ли способ загрузить светильники с круглыми ссылками? В качестве примера у меня есть следующий прибор:Доктрина крепления - круговые ссылки

BusinessEntityTeam: 
    Nicole_Team: 
    name: Nicole's Team 
    Manager: [Nicole] 
    Business: [ACMEWidgets] 

sfGuardUser 
    Nicole: 
    first_name:  Nicole 
    last_name:  Jones 
    email_address: [email protected] 
    username:  nicole 
    password:  nicole 
    Groups:   [Group_abc] 
    Team:   [Nicole_Team] 

Как вы можете видеть, Nicole_Team ссылки Николь ... но Николь также ссылается Nicole_Team.

Когда менеджер не был обязательным столбцом, это было нормально (прибор был загружен, но менеджер был NULL), но теперь требуется, чтобы загрузить прибор.

Единственное, что я могу видеть, это связать отношения Team в своем собственном объекте (например, «Профиль»), чтобы отношения больше не были круговыми.

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

ответ

1

Как об этом:

BusinessEntityTeam: 
    Nicole_Team: 
    name: Nicole's Team 
    Business: [ACMEWidgets] 

sfGuardUser 
    Nicole: 
    first_name:  Nicole 
    last_name:  Jones 
    email_address: [email protected] 
    username:  nicole 
    password:  nicole 
    Groups:   [Group_abc] 
    Team:   [Nicole_Team] 
    ManagerFor:  [Nicole_Team] 

Для того, чтобы избежать круговых ссылок, вы должны поставить отношения в одной модели.

+0

Спасибо за ваш ответ. Я попробовал это, добавив двунаправленную связь между BusinessEntityTeam и sfGuardUser, чтобы иметь отношение к ссылке. Зарядка загружается без ошибки, но значение по-прежнему равно NULL – PeterB

+0

Почему вы добавили двунаправленную связь? Я сделал это, чтобы избежать таких отношений. Если вы хотите знать менеджера команды, вам придется написать метод в вашей модели команды. таких как функция getManager() и реализовать метод самостоятельно. Sql должен быть чем-то вроде «select top 1 от пользователя u, где u.manager_for =?» –

+0

Я допустил ошибку. Вам не нужно писать метод getManager() самостоятельно. И вам не нужно добавлять двунаправленные отношения. Эти отношения автоматически двунаправлены. Например, вы добавляете отношения от пользователя к команде, тогда у вас есть два метода: user-> getTeam() и team-> getUsers() автоматически. Для вашего примера: будут два метода user-> getManagedTeam() и team-> getManager(). Я должен прочитать ваш schema.xml, чтобы рассказать вам подробнее. –

Смежные вопросы