2012-05-11 66 views
0

我已经在我的一个站点中使用CakePHP实现了评论功能,它的功能是find('threaded')cakephp删除线程记录

当我删除一个父注释时,我希望使用CakePHP模型的删除方法来删除它的所有子注释(n级子项)。

说,以下是这种情况:

ID = 5       PARENT_ID = 0;
id = 6       parent_id = 5;
id = 7       parent_id = 5;
id = 8       parent_id = ;

而且我做的:

$this->Comment->id = 5; 
$this->Comment->delete(); 

我想评论的ID记录= 5,6,7,8至被删除。

请指教。
感谢

回答

1

我没有测试过下面的代码,但我会做这样的事情:

<?php 
class Comment extends AppModel { 
    public function afterDelete() { 
     $this->deleteChildren($this->id); 
    } 

    private function deleteChildren($parentId) { 
     $children = $this->findByParentId($parentId); 
     if (!empty($children)) { 
      foreach ($children as $child) { 
       $this->deleteChildren($child['Comment']['id']); 
       $this->delete($child['Comment']['id']); 
      } 
     } 
    } 
} 
?> 
+0

它与我在下面的答案中发布的很少的更正一起工作。谢谢你。 – Prashant

+0

我不确定这是否是要走的路......我不确定您是否已经在模型文件中定义了这种关系,但如果是这样的话:您可以简单地设置“依赖”=>“真”您的关联定义和删除子元素将自动完成。 – Joep

0

小改正上述@ greew的答案,它的工作就像下面我:

public function afterDelete() { 
    $this->__deleteChildren($this->id); 
} 

private function __deleteChildren($parentId) { 
    $children = $this->findAllByParentId($parentId); 
    if (!empty($children)) { 
     foreach ($children as $child) { 
      $this->delete($child['Comment']['id']); 
     } 
    } 
} 

非常感谢!

+0

当然可以。无需在foreach循环中调用__deleteChildren。它在调用delete方法时自动完成。我很高兴它的工作,虽然乔普确实有一个关于'依赖'的设置。它也应该起作用,实际上是CakePHP的做法。 – greew