Pokud tomu dobře rozumím, chtěli byste načíst seznam objektů obsahu spolu s jejich potomky, správně?
Nejjednodušší způsob, jak toho dosáhnout, je vytvořit vztah rodič-dítě ve vašem výmluvném obsahu model a poté jej použijte k načtení rodičů s dětmi:
<?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);
}
}
Potom, pokud chcete uvést Obsah objekty svou sekci společně s jejich dětmi a jejich sekcemi můžete načíst data takto:
$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();
$contents bude obsahovat kolekci všech objektů Content, které nemají rodiče. Každý z objektů bude mít $content->děti atribut, který obsahuje kolekci všech podřízených obsahu objektů. Všechny podřízené objekty budou také obsahovat odkaz na jejich rodiče v $childContent->parent . Rodiče i děti budou mít odpovídající sekci v ->sekci atribut.
Chcete-li nyní zobrazit nějakou hierarchii obsahu ve svém Blade šablony, můžete předat proměnnou $contents do zobrazení a provést následující:
<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>
Všiml jsem si, že máte sekvenci pole ve vašem modelu. Předpokládám, že chcete, aby byl obsah seřazen podle tohoto pole. V tomto případě budete muset upravit způsob načítání dat:
$contents = Content::with(['children' => function($builder) {
$builder->orderBy('sequence', 'desc');
}, 'section', 'children.section'])->whereNull('parent_id')->get();