Om jag förstår det rätt, vill du hämta en lista över innehållsobjekt tillsammans med deras underordnade innehållsobjekt, eller hur?
Det enklaste sättet att göra det är att skapa en förälder-barn-relation i ditt vältaliga innehåll modell och använd den sedan för att ladda föräldrar med barn:
<?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);
}
}
Sedan, om du vill lista innehåll invänder deras sektion tillsammans med deras barn och deras sektioner kan du hämta data så här:
$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();
$contents kommer att innehålla en samling av alla innehållsobjekt som inte har någon förälder. Vart och ett av objekten kommer att ha ett $content->barn attribut som innehåller en samling av alla underordnade innehåll objekt. Alla underordnade objekt kommer också att ha en referens till sin förälder i $childContent->förälder . Både föräldrar och barn kommer att ha sin motsvarande sektion i ->sektion attribut.
Om du ville visa innehållshierarki nu i ditt blad mall kan du skicka variabeln $contents till vyn och göra följande:
<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>
Jag märkte att du har en sekvens fältet i din modell. Jag antar att du vill att innehållet ska sorteras efter det fältet. I det här fallet måste du ändra sättet du hämtar data på:
$contents = Content::with(['children' => function($builder) {
$builder->orderBy('sequence', 'desc');
}, 'section', 'children.section'])->whereNull('parent_id')->get();