2010-09-23 20 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।

जब प्रबंधक एक आवश्यक कॉलम नहीं था तो यह ठीक था (स्थिरता लोड हो गई, लेकिन प्रबंधक न्यूल था), लेकिन अब यह आवश्यक है कि स्थिरता लोड करना असंभव हो।

एकमात्र काम-आसपास मैं देख सकता हूं कि टीम संबंध अपने स्वयं के ऑब्जेक्ट (उदाहरण के लिए 'प्रोफ़ाइल') में रखना है ताकि संबंध अब परिपत्र नहीं हैं।

क्या कोई अन्य दृष्टिकोण है? प्रत्येक उपयोगकर्ता को एक टीम में होना होता है, लेकिन केवल कुछ उपयोगकर्ता ही टीम मैनेजर होते हैं। मैं इस तथ्य के लिए काफी खुला हूं कि मेरा डेटा मॉडल बुरी तरह से डिज़ाइन किया जा सकता है और इसमें सुधार के लिए जगह हो सकती है।

उत्तर

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 के बीच एक द्विपक्षीय संबंध जोड़ना। स्थिरता को बिना किसी त्रुटि के फेंक दिया जाता है, लेकिन मान अभी भी शून्य – PeterB

+0

आपने द्विपक्षीय संबंध क्यों जोड़ा? मैंने ऐसा रिश्ता से बचने के लिए किया था। यदि आप किसी टीम के प्रबंधक को जानना चाहते हैं, तो आपको अपने टीम मॉडल में एक विधि लिखनी होगी। जैसे फ़ंक्शन getManager() और विधि को स्वयं लागू करें। एसक्यूएल कुछ ऐसा होना चाहिए "उपयोगकर्ता से शीर्ष 1 का चयन करें जहां u.manager_for =?" –

+0

मैंने गलती की। आपको getManager() विधि स्वयं लिखने की आवश्यकता नहीं है। और आपको एक द्विपक्षीय संबंध जोड़ने की जरूरत नहीं है। रिश्ते स्वचालित रूप से द्विपक्षीय होते हैं। उदाहरण के लिए, आप उपयोगकर्ता से टीम में एक रिश्ता जोड़ते हैं, फिर आपके पास दो विधियां हैं: उपयोगकर्ता-> getTeam() और टीम-> getUsers() स्वचालित रूप से। आपके उदाहरण के लिए: दो विधियां उपयोगकर्ता-> getManagedTeam() और टीम-> getManager() प्राप्त करेंगी। आपको अधिक जानकारी देने के लिए मुझे अपनी schema.xml को पढ़ना होगा। –

संबंधित मुद्दे