Example #1
0
    /**
     * 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));
    }