Nếu tôi hiểu đúng, bạn muốn tìm nạp danh sách các đối tượng Nội dung cùng với các đối tượng Nội dung con của chúng, đúng không?
Cách dễ nhất để làm điều đó là tạo mối quan hệ cha-con trong Nội dung hùng hồn của bạn và sau đó sử dụng mô hình đó để tải các bậc cha mẹ có con cái:
<?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);
}
}
Sau đó, nếu bạn muốn liệt kê Nội dung đối tượng Phần của họ cùng với con cái và các bộ phận của chúng, bạn có thể tìm nạp dữ liệu như vậy:
$contents = Content::with(['children', 'section', 'children.section'])->whereNull('parent_id')->get();
$ nội dung sẽ chứa một tập hợp tất cả các đối tượng Nội dung không có cha. Mỗi đối tượng sẽ có $ content-> con thuộc tính chứa một tập hợp tất cả Nội dung con các đối tượng. Tất cả các đối tượng con cũng sẽ giữ một tham chiếu đến cha mẹ của chúng trong $ childContent-> parent . Cả cha mẹ và con cái sẽ có phần tương ứng của họ trong phần -> thuộc tính.
Nếu bây giờ bạn muốn hiển thị một số thứ bậc Nội dung trong Blade của mình mẫu, bạn có thể chuyển biến $ nội dung vào dạng xem và thực hiện như sau:
<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>
Tôi nhận thấy rằng bạn có trình tự trong mô hình của bạn. Tôi cho rằng bạn muốn nội dung được sắp xếp theo trường đó. Trong trường hợp này, bạn sẽ cần sửa đổi cách tìm nạp dữ liệu:
$contents = Content::with(['children' => function($builder) {
$builder->orderBy('sequence', 'desc');
}, 'section', 'children.section'])->whereNull('parent_id')->get();