2013-03-07 7 views
13

मैं लैरवेल का उपयोग कर रहा हूं, जो कि कमाल है, लेकिन मैं डेटाबेस के साथ किसी समस्या पर फंस गया हूं।लार्वेल में डीबी रिश्तों को कैसे श्रृंखलाबद्ध करें (एकाधिक है_मनी?)

तालिका 1:: पृष्ठों

id | route | title 

तालिका 2: तत्वों

id | page_id | type 

तालिका 3: सामग्री

मान लीजिए कि हम तीन टेबल, इसलिए की तरह करते हैं

id | element_id | data 

मैं पृष्ठ के लिए एक ही चयन करना चाहता हूं जो बदले में उस पृष्ठ आईडी के सभी तत्वों का चयन करेगा, और प्रत्येक तत्व के लिए इसे तत्व आईडी के साथ सभी सामग्री पंक्तियों का चयन करना चाहिए ।

मैं एक स्थिर load_by_route ($ मार्ग) पृष्ठ मॉडल में समारोह है कि, जब कहा जाता है, लोड और जैसा कि ऊपर वर्णित पेज की जानकारी के साथ-साथ तत्वों और सामग्री वापस जाने के लिए मार्ग का उपयोग करेगा करना चाहते हैं। आदर्श रूप से यह इस जानकारी के साथ एक एकल वस्तु/सरणी वापस कर देगा।

असल में, मुझे यकीन नहीं है कि has_many() एक साथ कॉल कैसे करें ताकि मुझे दो-स्तर के संबंध मिल सकें।

+1

सिर्फ सभी तालिकाओं में शामिल होने के रहते हैं। क्या आपने किसी एसक्यूएल का प्रयास किया है? – Randy

+3

मैं इसे लैरवेल के एलोक्वेंट का उपयोग करके लिख रहा हूं: http://laravel.com/docs/database/eloquent, सीधे एसक्यूएल के बजाय। – Pete

उत्तर

30

उत्सुक लोडिंग में देखें। यह वही करना चाहिए जो आप चाहते हैं।

class Page extends Eloquent { 

    public function elements() 
    { 
     return $this->has_many('Element'); 
    } 

} 

class Element extends Eloquent { 

    public function contents() 
    { 
     return $this->has_many('Content'); 
    } 

} 

class Content extends Eloquent {} 

$page = Page::with(array('elements', 'elements.contents'))->first(); 

https://laravel.com/docs/master/eloquent-relationships#eager-loading

+0

बहुत बढ़िया, धन्यवाद! मुझे एहसास नहीं हुआ था कि वह शब्द था जिसे मुझे देखने की ज़रूरत थी - मैं सिर्फ संबंधों के सभी वर्गों को पढ़ रहा था। धन्यवाद! – Pete

+1

बस यहां ध्यान देने के लिए, यह दृष्टिकोण एक साथ संबंधों को एक साथ नहीं करता है। यह बाल मॉडल रिकॉर्ड की उत्सुक लोडिंग करता है, लेकिन यह अभी भी 'पृष्ठ' प्राप्त होने पर अलग-अलग प्रश्नों की एक श्रृंखला के माध्यम से किया जाता है। – Jason

+0

एकाधिक रिश्तों के साथ उत्सुक लोडिंग ([5.3 डॉक्स] से (https://laravel.com/docs/5.3/eloquent-relationships#eager-loading)) - $ किताबें = ऐप \ बुक :: के साथ ('लेखक', ' प्रकाशक ') -> मिल(); – kerrin

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