¿Hay alguna forma de cargar dispositivos que tengan referencias circulares? A modo de ejemplo tengo el siguiente aparato:Accesorios Doctrine - referencias circulares
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]
Como se puede ver, Nicole_Team hace referencia a Nicole ... pero también hace referencia a Nicole Nicole_Team.
Cuando el Administrador no era una columna obligatoria, esto estaba bien (el dispositivo estaba cargado, pero el Administrador era NULO), pero ahora se requiere que sea imposible cargar el dispositivo.
La única solución alternativa que puedo ver es poner la relación de equipo en su propio objeto ('Perfil' por ejemplo) para que las relaciones ya no sean circulares.
¿Hay algún otro enfoque? Cada usuario debe formar parte de un equipo, pero solo unos pocos son gerentes de equipo. Estoy bastante abierto al hecho de que mi modelo de datos puede estar mal diseñado y puede mejorarse.
Gracias por su respuesta. Intenté esto, agregando una relación bidireccional entre BusinessEntityTeam y sfGuardUser para tener una relación con la referencia. El dispositivo se carga sin error, pero el valor sigue siendo NULL – PeterB
¿Por qué agregó una relación bidireccional? Lo que hice fue evitar tal relación. Si desea conocer el administrador de un equipo, debe escribir un método en su modelo de equipo. como function getManager() e implemente el método usted mismo. El sql debería ser algo así como "seleccionar top 1 del usuario u donde u.manager_for =?" –
Cometí un error. No necesita escribir un método getManager() usted mismo. Y tampoco necesita agregar una relación bidireccional. La relación es automáticamente bidireccional. Por ejemplo, si agrega una relación de Usuario a Equipo, entonces tiene dos métodos: usuario-> getTeam() y equipo-> getUsers() automáticamente. Para su ejemplo: habrá dos métodos usuario-> getManagedTeam() y team-> getManager(). Tengo que leer su schema.xml para contarle más detalles. –