因此,我创建了一个名为“书籍”的模型。每本书都有一组作为嵌套类别的类型(使用模型Genre),因此一本书可能是小说〉成人〉科幻小说〉赛博朋克或非小说〉年轻人〉历史〉罗马等。
书籍和类型之间存在多对多的关系,并有一个数据透视表将两者联系起来。
Genre模型看起来是这样的:
class Genre extends Model
{
use HasFactory;
use HasRecursiveRelationships;
public function books()
{
return $this->belongsToMany(books::class);
}
public static function tree()
{
$allgenres = Genre::get();
$rootgenres = $allgenres->whereNull('parent_id');
self::formatTree($rootgenres, $allgenres);
return $rootgenres;
}
private static function formatTree($genres, $allgenres)
{
foreach ($genres as $genre) {
$genre->children = $allgenres->where('parent_id', $genre->id)->values();
if ($genre->children->isNotEmpty()) {
self::formatTree($genre->children, $allgenres);
}
}
}
书的模型是这样的:
class Books extends Model
{
use HasFactory;
public function writer(): BelongsTo
{
return $this->belongsTo(Writer::class);
}
public function genres()
{
return $this->belongsToMany(Genre::class);
}
}
然后在book.blade.php中我写了以下内容:
<div>
@foreach ($book->genres as $genre)
<div>{{ $genre->name }}
@foreach ($genre->children as $child)
<div class="ml-5">{{ $child->name }}
@foreach ($child->children as $child2)
<div class="ml-5">{{ $child2->name }}
@foreach ($child->children as $child3)
<div class="ml-5">{{ $child3->name }}</div>
@endforeach
</div>
@endforeach
</div>
@endforeach
</div>
@endforeach
</div>
然后,它将模型中的每一个流派都转储出来,如下所示:
我想要的是它只显示这本书的选定类型,看起来我到目前为止只显示了特定书籍关系的最高层,但当它进入子层时,这种关系福尔斯了。
1条答案
按热度按时间iszxjhcz1#
如果你只想得到4个级别的流派,试试: