2012-05-11 8 views
0

Я реализовал функцию комментариев на одном из моих сайтов, используя CakePHP, и это функция find('threaded').cakephp delete threaded records

Когда я удаляю родительский комментарий, я хочу, чтобы все его дочерние комментарии (дети n-level) также удалялись, используя метод удаления модели CakePHP.

Скажем, после случай:

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(); 

Я хочу записи с комментарием ид = 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

Я не уверен, что это путь ... Я не уверен, что вы определили эту взаимосвязь в своем файле модели, но если это так: вы можете просто установить 'dependable '=> true' в ваше определение ассоциации и удаление дочерних элементов будет выполнено автоматически. – 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

Да, конечно. Не нужно вызывать __deleteChildren в цикле foreach. Это делается автоматически при вызове метода удаления. Я рад, что это сработало, хотя у Джопа есть точка в отношении «зависимой» настройки. Он также должен работать, и на самом деле это способ CakePHP. – greew