平时的分类基本都市这样的
水果(0)
|--外国水果(1)
| |--栗子(2)
|
|--国产水果(1)
|--栗子(2)
注意如果我们使用上面那种数据表的结构的话会存在这问题。如果数据量很多的时候就会出现。
1. 场景一:从上级开始查找它所有的子级,这个时候就需要使用递归的算法去查询所有的子级内容,同时会产生很多的SQL查询,从而影响性能。
2. 场景二:从最小的子级开始查找所有的上级,这个时候同样的也是递归的方式查找,同样也有很多的查询SQL
3. 场景三:这个情景可能会在多级分销中出现,就是判断哪个内容是否存在上下级的关系
应对与这个三个问题的解决可以通过新增一个字段possess来记录一个内容中的所有上级id,可以通过任意分割符号进行分 比如在本次项目中可以使用 ‘-’
php artisan make:migration add_path_to_goods_categories_table --table=goods_categories
加了这个字段之后对于上面的三个问题的解决
1. 从上往下查找的时候字只需要取出那个字段的内容 ,然后where ‘possess’ like ‘-1-%’ 即可
2.从下往上查找的时候只需要获取那个字段,然后同样的字符串处理就好了
3.判断是否存在关系,先获取level最大的那个信息中的possess的值。然后再获取了一个possess同时在这个值上跟上这条数据的id-。 然后判断第一个值的内容是否以第二个值的内容开头如果是就存在关系,否则相反
修改模型
定义了一个关联关系,在category定义一个与上级以及子级的模型关联。然后添加三个获取器;1.获取所有的上级id,2.根据获取的id获取子级的所有上级,并且根据level排序。 至于之后一个只是获取所有的上级名称