Jeśli dobrze rozumiem, chcesz pobrać listę obiektów treści wraz z ich podrzędnymi obiektami treści, prawda?
Najłatwiej to zrobić, tworząc relację rodzic-dziecko w swojej Wymownej Treści model, a następnie użyj go, aby załadować rodziców z dziećmi:
<?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);
}
}
Następnie, jeśli chcesz wymienić Treść sprzeciwia się ich sekcji wraz z ich dziećmi i ich sekcjami możesz pobrać dane w ten sposób:
$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();
$contents będzie zawierać kolekcję wszystkich obiektów Content, które nie mają elementu nadrzędnego. Każdy z obiektów będzie miał $content->dzieci atrybut, który przechowuje kolekcję wszystkich elementów podrzędnych Treść przedmioty. Wszystkie obiekty podrzędne będą również zawierać odniesienie do swojego rodzica w $childContent->rodzic . Zarówno rodzice, jak i dzieci będą mieli odpowiednią sekcję w ->sekcji atrybut.
Jeśli chcesz teraz wyświetlić hierarchię treści w swoim Blade szablon, możesz przekazać zmienną $contents do widoku i wykonać następujące czynności:
<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>
Zauważyłem, że masz sekwencję pole w Twoim modelu. Zakładam, że chcesz, aby zawartość była posortowana według tego pola. W takim przypadku musisz zmienić sposób pobierania danych:
$contents = Content::with(['children' => function($builder) {
$builder->orderBy('sequence', 'desc');
}, 'section', 'children.section'])->whereNull('parent_id')->get();