无限分类删除操作优化

背景:

  两种操作方法都是MVC的思想下进行的。

需求(更好的数据安全):

  若该分类为非叶子节点,则不允许删除。

在进行删除操作时,需要判断该分类是否为叶子节点,判断的方法决定了查询的效率。

简单说明无限分类的思路

首先,分类表的字段需要包含这几个字段

当前分类ID当前分类名称当前分类的父ID
cat_id(primary key)cat_namecat_parent_id

其次,我们需要递归对表记录进行排序,排序的依据是,所有类都要挂在其父类下,然后再依据主键自然排序。

所以我们需要一个递归函数

 有了以上前提,可以讨论如何删除叶子节点了。

判断叶子节点

方法一

在原生PHP进行的

给定一个分类cat_id,找其所有后代分类的cat_id,先把表所有记录找出来,

方法二

在TP中进行的

用当前分类的cat_id去匹配所有分类的parent_id,如果没有匹配的,则可以删除

两种方法代码量上的区别这里不是讨论重点。

两种方法根本区别是,第一种方法没有合理利用cat_parent_id,所以操作起来非常繁琐,而且浪费资源(获取所有记录),还用到递归。第二种方法,只获取字段cat_parent_id的值即可。

额外说明

第二种方法不适合这种需求

需求:若该节点是非叶子节点,则删除包括该节点的所有后代节点,这种情况适合使用第一种方法,并且需要对getChildrenIds稍作改进,把自身id加入数组。。

 

 

1 Comment

  1. 叨叨 Author 八月 26, 2015 (9:16 下午)

    这么删除是个好办法

    Reply to 叨叨

Leave a Comment

*Required fields Please validate the required fields

*

*