Api接口实战:无限极分类实现
最近开发商品功能,在尝试递归和引用方式后,蓦然回首,突然发现laravel框架有更简单高效的实现方式,无限极分类最佳实践,open code与大家共享!感兴趣的Mark一下,谢谢~
表结构如下:
CREATE TABLE `goods_category` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
`name` varchar(500) DEFAULT '' COMMENT '分类名称',
`pid` int(5) unsigned DEFAULT '0' COMMENT '父级id',
`level` tinyint(3) unsigned DEFAULT '1' COMMENT '分类等级',
`status` tinyint(3) unsigned DEFAULT '0' COMMENT '分类状态:0-禁用,1-正常',
`created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `status` (`status`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表';
数据存储格式:
业务代码:
// 模型文件
public function children() {
return $this->hasMany(get_class($this), 'pid' ,'id');
}
public function allChildren() {
return $this->children()->with( 'allChildren' );
}
// 控制器
$list = GoodsCategory::with('allChildren')->first();
dd($list);
处理后数据:
至此,laravel框架无限极分类实现完毕,相比递归和引用实现无限极分类的两种方式,是不是简单高效很多呢,关于更多laravel特性,欢迎评论区留言探讨。
参考文档:laravel5.4实现无限级分类
欢迎关注公众号
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
高认可度评论:
试试这两个方法,不用多次查询数据库
用sql做递归第二天就被开了,在实现业务的同时更要注重性能
好的 感谢分享
:+1:
试试这两个方法,不用多次查询数据库
这样会多次查库吧
这样的话子查询了,建议还是用php处理比较好
试过这个方法,在有 3000 条数据的情况下,处理时间太长,不可取。
这样设计无限分类都是唠嗑有问题的,使用二叉树来设计,效果高,查询快,左右节点 my.oschina.net/corwien/blog/687664
我感觉性能上用文件静态化来解决
mark
用 ClosureTable 可以缩减到两次查询获取到所有子集/父级数据
www.yuque.com/docs/share/9852f2aa-...
zhuanlan.zhihu.com/p/33279392 laravel-nestedset:多级无限分类正确姿势
用过这个也挺好用的,也是基于左右两个节点,效率高速度快,提供丰富的API查询和插入。
通过保存path去完成高性能树的建立,具体可参考:lumina.xbhub.com/docs/zh/guide/trai...
用sql做递归第二天就被开了,在实现业务的同时更要注重性能
贴个我写的:github.com/eddy8/lightCMS/blob/mas...
优雅
不需要额外定义一个 allchildren
www.phpbloger.com/article/50.html#...
这篇文章博主分析了四种方法优缺点,根据自己业务需求选择。
直接先把mysql中的所有数据先查出来,利用php处理,结果可以加缓存
感谢