Esiste un modo per caricare proiettori con riferimenti circolari? Per fare un esempio ho il seguente dispositivo:Infissi di dottrina - riferimenti circolari
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]
Come si può vedere, Nicole_Team fa riferimento Nicole ... ma Nicole fa riferimento anche Nicole_Team.
Quando Manager non era una colonna richiesta, ciò era OK (il dispositivo è stato caricato, ma Manager era NULL), ma ora è richiesto che sia impossibile caricare l'apparecchiatura.
L'unica soluzione che riesco a vedere è mettere la relazione di squadra nel proprio oggetto ('Profilo' ad esempio) in modo che le relazioni non siano più circolari.
C'è qualche altro approccio? Ogni utente deve essere in una squadra, ma solo pochi utenti sono team manager. Sono abbastanza aperto al fatto che il mio modello di dati possa essere mal progettato e avere margini di miglioramento.
Grazie per la risposta. Ho provato questo, aggiungendo una relazione bidirezionale tra BusinessEntityTeam e sfGuardUser al fine di avere una relazione di riferimento. L'apparecchiatura viene caricata senza generare alcun errore, ma il valore è ancora NULL – PeterB
Perché hai aggiunto una relazione bidirezionale? Quello che ho fatto è di evitare una simile relazione. Se vuoi conoscere il manager di un team, dovresti scrivere un metodo nel tuo modello di squadra. come la funzione getManager() e implementare il metodo da soli. Il file sql dovrebbe essere qualcosa del tipo "seleziona il primo 1 di user u dove u.manager_for =?" –
Ho fatto un errore. Non è necessario scrivere autonomamente un metodo getManager(). E non è necessario aggiungere una relazione bidirezionale. La relazione è automaticamente bidirezionale. Ad esempio, aggiungi una relazione da Utente a Team, quindi hai due metodi: user-> getTeam() e team-> getUsers() automaticamente. Per il tuo esempio: ci saranno due metodi user-> getManagedTeam() e team-> getManager(). Devo leggere il tuo schema.xml per dirti maggiori dettagli. –