Laravel中使用Baum包如何筛选Category模型的所有叶子节点?
解决Laravel中用Baum包筛选Category叶子节点的问题
嘿,刚好我对Baum这个树形结构包挺熟悉的,直接给你说怎么实现!
Baum包已经为你的Category模型内置了专门筛选叶子节点的查询范围方法——leaves(),它会自动帮你过滤出所有没有子节点的叶子节点,底层是通过Baum维护的lft和rgt字段来判断的,不用你自己写复杂的条件。
你想要的逻辑可以直接改成这样:
Category::leaves() ->whereIn('category_id', $categories) ->brands() ->syncWithoutDetaching([$request->get('brand_id')]);
简单解释下:
leaves():这就是你要找的那个筛选叶子节点的方法,调用它之后,查询构建器就只会返回没有子节点的Category实例- 后面的
whereIn、关联操作和syncWithoutDetaching都可以正常链式调用,完全不影响原有逻辑
如果之后你有特殊的叶子节点判定规则(比如某些节点虽然有子节点但你想把它当作叶子),还可以自己扩展自定义的查询范围,但默认的leaves()已经能满足绝大多数场景啦。
内容的提问来源于stack exchange,提问作者Ahmad Badpey
相关产品推荐
相关产品推荐

