首页 > 解决方案 > Laravel Eloquent 条件来获取层次结构级别

问题描述

Laravel Eloquent 条件来获取层次结构级别。

我有一个名为的表routes,它是self-referencing

样本数据:

(PK)                    
Id  title       route_id
1   users       null
2   home        null
3   foo         1      
4   bar         3      
5   hoge        3     

我想要一个根据其层次结构获取路由的功能

$this->routes->getByHierarchyLevel(1);
// results                    
Id  title       route_id
1   users       null
2   home        null


$this->routes->getByHierarchyLevel(2);
// results                    
Id  title       route_id
3   foo         1

$this->routes->getByHierarchyLevel(3);
// results                    
Id  title       route_id
4   bar         3      
5   hoge        3

这个有可能有一个单一的链式查询构建器/雄辩的构建器吗?

我已经为此做了一个自定义函数,但它是一个循环查询,或者另一种解决方案是获取所有并过滤。

标签: laraveleloquentrecursive-query

解决方案


我建议level在您的路由表中引入一个新列,并在插入时检测它们的嵌套级别并将其保存在您的表中,这样您就可以轻松执行过滤器而无需任何额外开销,否则您将需要复杂/昂贵的查询能够检测它们的水平并应用过滤器


ID 标题 route_id 等级
1 用户 无效的 1
2 无效的 1
3 1 2
4 酒吧 3 3
5 霍格 3 3

推荐阅读