2017-05-13 13 views
5

मैं है निम्नलिखित डेटाबेस तालिकाओंलुमेन: Eloquent का उपयोग कर उप तालिका सूचियों को कैसे प्राप्त करें?

  • कस्बों
  • सड़कें
  • मकान

वे एक दूसरे के साथ कई रिश्तों को एक एक तो Towns हो सकता है कई Streets और Streets कई हो सकता है Houses पर।

मेरे पास Town की आईडी है और मैं बस शहर में सभी Houses की एक सूची प्राप्त करना चाहता हूं। तो फिलहाल मैं कर रहा हूँ।

//This gives me streets and houses in nested arrays 
$towns = Town::with(['streets', 'streets.houses' => function($query) { 
    $query->where('active', 1) 
}])->find($town_id); 

//But I only want a list of houses so I do 
$houses = $towns->streets->map(function($street) { 
    return $street->houses; 
}); 

यह काम करता है लेकिन क्या ऐसा करने का एक बेहतर तरीका है? मुझे लगता है कि मुझे सिर्फ बोलने वाले घरों की सूची प्राप्त करने में सक्षम होना चाहिए। कुछ मैपिंग करने के बाद बाद में सही प्रतीत नहीं होता है।

उत्तर

1

आप सही हैं कि इस मामले में आलसी लोडिंग प्रभावी नहीं है।

आपको बस घरों की सूची की आवश्यकता है, मैं सिर्फ जोड़ों के साथ उचित क्वेरी तैयार करूंगा।

House::query() 
->join('street', 'house.id', 'street.id') 
->join('town', 'street.town_id', '=', 'town.id') 
->where('town.id', $town_id) 
->get(); 

Tweak रूप में की जरूरत:

यहाँ एक उदाहरण है।

कभी-कभी क्वेरी निर्माता को बोलने पर अधिक समझदारी होती है।

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