在处理具有层级关系的数据时,如评论或分类系统,经常需要实现递归删除功能。以下是使用PHP和ThinkPHP框架实现这一功能的示例代码:
// 定义分类ID$categoryId = $this->getChildrenIds($CommentId) . $CommentId; // 获取当前分类及其所有子类的IDDb::name('hr_comment')->whereIn('id', $categoryId)->update(['deletetime' => time()]); // 更新指定ID的记录,设置删除时间
为了实现上述功能,我们需要定义一个递归函数来获取指定分类的所有子类ID:
public function getChildrenIds($sortId) { $ids = ''; $results = Db::name('hr_comment')->where('parent_id', $sortId)->select()->toArray(); if ($results) { foreach ($results as $value) { $ids .= $value['id'] . ','; $ids .= $this->getChildrenIds($value['id']); // 递归调用获取子类ID } } return $ids;}
该方法首先通过父ID查询所有直接子类,然后对每个子类再次调用自身,直到没有更多的子类为止。最终返回所有子类的ID字符串,用于后续的删除操作。