Als ik het goed begrijp, wil je een lijst met inhoudsobjecten ophalen samen met hun onderliggende inhoudsobjecten, correct?
De eenvoudigste manier om dat te doen is door een ouder-kindrelatie te creëren in je Welsprekende Content model en gebruik dat dan om ouders met kinderen te laden:
<?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);
}
}
Als u vervolgens Inhoud . wilt weergeven objecten hun Sectie samen met hun kinderen en hun secties, kunt u de gegevens als volgt ophalen:
$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();
$contents zal een verzameling bevatten van alle Content-objecten die geen bovenliggend item hebben. Elk van de objecten heeft een $content->children attribuut dat een verzameling van alle Inhoud voor kinderen bevat voorwerpen. Alle onderliggende objecten bevatten ook een verwijzing naar hun ouder in $childContent->ouder . Zowel ouders als kinderen hebben hun overeenkomstige sectie in ->sectie attribuut.
Als je nu wat inhoudshiërarchie wilt weergeven in je Blade sjabloon, kunt u de variabele $contents doorgeven aan de weergave en het volgende doen:
<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>
Ik heb gemerkt dat je een reeks . hebt veld in uw model. Ik ga ervan uit dat u wilt dat de inhoud op dat veld wordt gesorteerd. In dit geval moet u de manier wijzigen waarop u de gegevens ophaalt:
$contents = Content::with(['children' => function($builder) {
$builder->orderBy('sequence', 'desc');
}, 'section', 'children.section'])->whereNull('parent_id')->get();