Se entendi corretamente, você gostaria de buscar uma lista de objetos Content junto com seus objetos Content filhos, correto?
A maneira mais fácil de fazer isso é criar uma relação pai-filho em seu Conteúdo do Eloquent model e, em seguida, use isso para carregar os pais com filhos:
<?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);
}
}
Então, se você quiser listar Conteúdo objeta sua Seção junto com seus filhos e suas seções, você pode buscar os dados assim:
$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();
$contents conterá uma coleção de todos os objetos Content que não têm pai. Cada um dos objetos terá um $content->children atributo que contém uma coleção de todos os Conteúdo filhos objetos. Todos os objetos filhos também terão uma referência ao pai em $childContent->pai . Pais e filhos terão sua seção correspondente em ->seção atributo.
Se você quiser exibir alguma hierarquia de conteúdo agora em seu Blade template, você pode passar a variável $contents para a view e fazer o seguinte:
<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>
Percebi que você tem uma sequência campo em seu modelo. Suponho que você deseja que o conteúdo seja classificado por esse campo. Nesse caso, você precisará modificar a maneira de buscar os dados:
$contents = Content::with(['children' => function($builder) {
$builder->orderBy('sequence', 'desc');
}, 'section', 'children.section'])->whereNull('parent_id')->get();