当前位置: 首页 > 知识库问答 >
问题:

在Laravel 5.2中创建嵌套类别列表的面包屑

卢伟志
2023-03-14

桌子

+---------+-----------+-----------+
|      id |   name    | parent_id |
+---------+-----------+-----------+
|       1 | Supports  |        0  |    
|       2 | Mobile    |        0  |      
|       3 | Outdoor   |        1  |       
|       4 | Samsung   |        2  |   
|       5 | Cricket   |        3  |  
|       6 | Team A    |        5  |      
+---------+-----------+-----------+

类别模型

class Categories extends Model {

    public $table = "categories";
    protected $fillable = ['name', 'parent_id', 'status'];

    public function parentCat() {
        return $this->belongsTo(Categories::class, 'parent_id');
    }

    public function childrenCat() {
        return $this->hasMany(Categories::class, 'parent_id');
    }

} 

控制器方法

Categories::where('parent_id', $parent_id)->orderBy('name', 'ASC')->get();

问题一

如果我正在查看蟋蟀的子类别,例如:

家-

问题二

如何删除所有子类别,同时删除主要类别。例如,如果我删除户外,那么板球和团队A应该被删除

共有1个答案

吴单鹗
2023-03-14

首先,考虑将类别结构更改为嵌套集模型。处理嵌套类别(和其他结构)更好、更安全。这是nice Laravel的套餐:

https://github.com/etrepat/baum

对于您的示例,只有不是特别最优的解决方案。当你将查询叶子类别:

$category = Categories::where('parent_id', $parent_id)
               ->orderBy('name', 'ASC')
               ->first();
return view({your view here}, compact('category'));

您需要部分视图(例如:breadcrumb.blade.php)和部分:

<ul>
@section('breadcrumb')
@show
</ul>

在主要动作中,你可以这样想:

@section('breadcrumb')
    <li>{{$category->name}}</li>
@stop
@while($parent = $category->parent)
    @section('breadcrumb')
        @parent
        <li>{{$parent->name}}</li>
    @stop
@endwhile

注意事项

但是正如我在开始时所说的——这是非常次优的解决方案,因为您必须为每个父级调用查询,所以只有当您没有太多嵌套级别时才可以。

 类似资料:
  • 问题内容: 我想要一个变量,它是许多空列表的嵌套列表,以后可以填写。看起来像这样: 但是,我不知道仅在创建步骤之前需要多少个列表,因此我需要一个变量来确定它。我想到了simple ,但是创建了列表的副本,这不是我想要的。 我可以做: 但我正在寻找更优雅的解决方案(最好是单线)。有没有? 问题答案: 尝试列表理解: 见下文: 但是请注意,以上内容适用于Python2.x。在Python 3.x.上,

  • 我为我的项目工作分层类别和产品表。 类别表结构: 身份证-父母-所有权 1-0-计算机 1-0-电话 ... 分类表行25107的计数。 产品表结构 ID-CAT-TITLE 1-1-产品名称在这里 我想要列表产品的当前类别和子类别。 输出为:641981835518356956239050461189005561179059050690507612090509050905059051090511

  • 下面是我创建的表格。 创建嵌套表时出现以下错误。 ORA-02320:为嵌套表列odetails\u ntab ORA-25175创建存储表失败:找不到主键约束02320。00000-“为嵌套表列%s创建存储表失败”*原因:为指定的嵌套表列创建存储表时出错*操作:有关更多详细信息,请参阅下面的消息。如果他们描述的情况能够得到纠正,那么就这样做;否则请与Oracle支持部门联系。 获取第9行ORA-

  • 我有一个包含字典作为其元素的列表 我想从dict_1变量中得到这样的输出 帮助我知道在这种情况下我该怎么做。

  • 问题内容: 说我要制作以下JSON 目前,这就是我实现的方式 似乎应该有一个更好的方法来做到这一点,而不是做更多的事情,然后将它们放置在主体中。有比我正在使用的方法更好的动态构建方法吗? 在此先感谢您的帮助! 问题答案: 如果您处理大量JSON数据,我真的建议您使用Gson或Jackson。这要方便得多,并且两个库都很好地支持与Java对象之间的相互转换(与通过JSONObjects手动构建JSO

  • 问题内容: 我有一个其中嵌套了数据类对象的数据类对象。但是,当我创建主对象时,嵌套的对象会变成字典: 如您所见,我试图将所有数据作为字典传递,但没有得到预期的结果。然后,我尝试先构造嵌套对象,然后将其传递给对象构造函数,但得到的结果相同。 理想情况下,我想构造我的对象以获得以下内容: 除了在访问对象属性时手动将嵌套字典转换为相应的数据类对象之外,还有什么方法可以实现? 提前致谢。 问题答案: 这是