अगर मैं सही ढंग से समझूं, तो आप सामग्री वस्तुओं की एक सूची उनके बच्चों के साथ लाना चाहते हैं, सही है?
ऐसा करने का सबसे आसान तरीका है अपने वाक्पटु सामग्री में माता-पिता-बच्चे के संबंध बनाना मॉडल और फिर उसका उपयोग माता-पिता को बच्चों के साथ लोड करने के लिए करें:
<?php
class Content extends Model {
public function children() {
//this defines a relation one-to-many using parent_id field as the foreign key
return $this->hasMany(Content::class, 'parent_id');
}
public function parent() {
return $this->belongsTo(Content::class, 'parent_id');
}
public function section() {
return $this->belongsTo(Section::class);
}
}
फिर, यदि आप सामग्री list को सूचीबद्ध करना चाहते हैं ऑब्जेक्ट उनके अनुभाग उनके बच्चों और उनके वर्गों के साथ, आप इस तरह से डेटा प्राप्त कर सकते हैं:
$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();
$contents में उन सभी सामग्री ऑब्जेक्ट्स का संग्रह होगा जिनमें कोई अभिभावक नहीं है। प्रत्येक ऑब्जेक्ट में एक $content->child . होगा विशेषता जिसमें सभी बच्चों का संग्रह होता है सामग्री वस्तुओं। $childContent->parent . में सभी बच्चों की वस्तुओं में उनके माता-पिता का संदर्भ भी होगा . माता-पिता और बच्चों दोनों का ->अनुभाग . में संबंधित अनुभाग होगा विशेषता।
यदि आप अपने ब्लेड . में अभी कुछ सामग्री पदानुक्रम प्रदर्शित करना चाहते हैं टेम्पलेट, आप $contents चर को दृश्य में पास कर सकते हैं और निम्न कार्य कर सकते हैं:
<ul>
@foreach($contents as $content)
<li>{{$content->title}}</li>
@if($content->children->count() > 0)
<ul>
@foreach($content->children as $childContent)
<li>{{$childContent->title}}</li>
@endforeach
</ul>
@endif
@endforeach
</ul>
मैंने देखा है कि आपके पास एक अनुक्रम है अपने मॉडल में फ़ील्ड। मैं मानता हूं कि आप चाहते हैं कि सामग्री को उस क्षेत्र के अनुसार क्रमबद्ध किया जाए। इस मामले में आपको डेटा लाने के तरीके को संशोधित करने की आवश्यकता होगी:
$contents = Content::with(['children' => function($builder) {
$builder->orderBy('sequence', 'desc');
}, 'section', 'children.section'])->whereNull('parent_id')->get();