2013-06-02 7 views
6

मैं 'उपयोगकर्ता' तालिका और 'उपयोगकर्ता_प्रोफाइल' तालिका के बीच एक सुंदर सीधा संबंध बनाने का प्रयास कर रहा हूं। प्रत्येक उपयोगकर्ता के पास user_profile है, इसलिए यह एक-एक-एक-एक है। डॉक्स पाया @http://four.laravel.com/docs/eloquent#one-to-one मैं अपने उपयोगकर्ता मॉडल के लिए निम्न समारोह जोड़ लिया है के अनुसार:लैरवेल 4 एलोक्वेंट ओआरएम गतिशील गुणों के माध्यम से एक-से-एक संबंध तक पहुंच

public function user() 
{ 
    return $this->belongsTo('User'); 
} 

मैं से उपयोग करने के लिए कोशिश कर रहा हूँ:

public function user_profile() 
{ 
    return $this->hasOne('User_profile'); 
} 

और इस रिश्ते मेरी User_profile मॉडल में परिभाषित किया गया है इस तरह नियंत्रक:

// Get current user 
    $user = User::find(Auth::user()->id); 
    $profile = $user->user_profile; 

    print_r($user); 
    print_r($profile); 

    echo "User's name is: " . $user->user_profile->first_name . ' ' . $user->user_profile->last_name; 

दुर्भाग्य से मुद्रण $ उपयोगकर्ता बाहर उपयोगकर्ता मॉडल क्षेत्रों ठीक प्रिंट, लेकिन एक रिश्ते के किसी भी ट्रेस प्रदर्शित नहीं करता है; $ प्रोफाइल खाली है। 'रिलेशनशिप' सरणी भी खाली है, जिसे मैं अनुमान लगा रहा हूं शायद भरा जाना चाहिए।

मैं के रूप में यहाँ का सुझाव दिया http://four.laravel.com/docs/eloquent#dynamic-properties

अन्यथा अगर मैं बस जाओ 'गतिशील गुण' का उपयोग करने की कोशिश कर रहा हूँ:

echo "User's name is: " . $user->user_profile()->first()->first_name . ' ' . $user->user_profile()->first()->last_name; 

यह काम करता है .. लेकिन मैं वास्तव में ऐसा करने के लिए होने की तरह नहीं है ।

कोई सुझाव?

उत्तर

7

ठीक है तो कक्षा के नामों में अंडरस्कोर का उपयोग करने के साथ समस्या को हल करना पड़ा। लैरवेल here के रूप में उल्लिखित पीएसआर 0 और 1 का पालन करता है।

इसका क्या मतलब है कि मुझे अपने मॉडल वर्ग और फ़ाइल नाम उपयोगकर्ता प्रोफाइल नाम देना था (भले ही मेरी माईएसक्ल तालिका नाम 'user_profiles' बनी हुई हो), और फिर मेरे उपयोगकर्ता मॉडल को उपयोगकर्ता प्रोफाइल() नामक फ़ंक्शन रखने के लिए अपडेट करें।

एक बार मैं नामकरण अद्यतन, मैं अपने आप की तरह कुछ करने से रिश्तों पहुंच सकता है:

$user = Auth::user(); 
echo $user->userProfile->first_name; 
+1

मैं L4 प्यार लेकिन इस पहलू से लोगों को बहुत बाहर पकड़ने चाहिए। मुझे एक ही समस्या थी, लेकिन मेरे मामले में यह उत्पाद प्रकारों के साथ करना था और यह पता चला कि मुझे 'producttype()' के बजाय रिलेशनशिप विधि 'productType() 'नाम देना था। पोस्ट करने के लिए धन्यवाद और उम्मीद है कि यह कुछ अन्य लोगों की मदद करता है। – JamesG

+0

हां, साथ ही यह कष्टप्रद है कि नामांकन टेबल और उनके संबंधित तालिकाओं जैसे ऑब्जेक्ट्स के लिए होता है, लेकिन आप तालिका फ़ील्ड के लिए अंडरस्कोर नामकरण पर वापस जाते हैं, यानी first_name। यह असंगतता हल्के से परेशान है। – John

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