Ако разбирам правилно, бихте искали да извлечете списък с обекти Content заедно с техните дъщерни обекти Content, нали?
Най-лесният начин да направите това е да създадете връзка родител-дете във вашето Eloquent Съдържание модел и след това го използвайте, за да заредите родителите с деца:
<?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);
}
}
След това, ако искате да посочите Съдържание обекти техния Раздел заедно с техните деца и техните секции, можете да извлечете данните по следния начин:
$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();
$contents ще съдържа колекция от всички обекти Content, които нямат родител. Всеки от обектите ще има $content->деца атрибут, който съдържа колекция от всички дъщерни Съдържание обекти. Всички дъщерни обекти също ще съдържат препратка към своя родител в $childContent->parent . И родителите, и децата ще имат съответния раздел в ->раздел атрибут.
Ако искате да покажете някаква йерархия на съдържанието сега във вашия Blade шаблон, можете да предадете променливата $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();