/** * idとblog_idをキーとした削除 + 付随情報も削除 */ public function deleteNodeByIdAndBlogId($id, $blog_id) { // 対象のカテゴリー取得 $category = $this->findByIdAndBlogId($id, $blog_id); if (empty($category)) { return 0; } // カテゴリーの紐付け情報削除(子カテゴリの紐付けも削除する) $sql = <<<SQL DELETE FROM entry_categories WHERE entry_categories.blog_id=? AND entry_categories.category_id IN ( SELECT id FROM categories WHERE categories.blog_id=? AND categories.lft>=? AND categories.rgt<=? ) SQL; $params = array($blog_id, $blog_id, $category['lft'], $category['rgt']); $this->executeSql($sql, $params); // カテゴリーに紐付いていないEntryに未分類エントリーと紐付ける $sql = <<<SQL INSERT INTO entry_categories SELECT entries.blog_id, entries.id, 1 FROM entries WHERE entries.blog_id=? AND NOT EXISTS ( SELECT 1 FROM entry_categories WHERE entry_categories.blog_id=? AND entries.id=entry_categories.entry_id ) SQL; $params = array($blog_id, $blog_id); $this->executeSql($sql, $params); // 未分類エントリーの件数を更新 $options = array('fields' => 'COUNT(*)', 'where' => 'blog_id=? AND category_id=1', 'params' => array($blog_id)); $count = Model::load('EntryCategories')->find('one', $options); $this->updateByIdAndBlogId(array('count' => $count), 1, $blog_id); // カテゴリー削除 return parent::deleteNodeById($id, 'blog_id=?', array($blog_id)); }