对于cms / block实体,为什么从cms_page_store中显式删除从属数据?


8

cms/block实体具有联接表cms_block_store,即将给定块链接到一个或多个商店的记录。在CE 1.6之前,资源模型Mage_Cms_Model_Mysql4_Block(链接)在删除实体之前不会单独删除这些记录,而是有效地依靠级联来删除它们。从1.6.0.0版本开始,在从以下位置删除实体之前,重定位的资源模型显式删除了Mage_Cms_Model_Resource_Block::_beforeDelete(链接) 中的这些记录:cms_block

protected function _beforeDelete(Mage_Core_Model_Abstract $object)
{
    $condition = array(
        'block_id = ?'     => (int) $object->getId(),
    );

    $this->_getWriteAdapter()->delete($this->getTable('cms/block_store'), $condition);

    return parent::_beforeDelete($object);
}

是否有明显的理由在两个单独的查询中执行此操作,而不是像以前那样依赖级联?


Magento核心团队在这里读书吗?
亚历克斯

我希望如此!如果我们在这里找不到任何好的答案,我将等几天,然后对其中的一些命令执行ping操作。
benmarks

也许重构代码的实习生认为这是个好主意……将某些内容移出数据库,将逻辑保持在代码级别。
FlorinelChis

那么是时候对它们执行ping操作了:-)
Alex

2
@Alex-这个周末我将在洛杉矶和他们一起聚会,并在此处更新。
benmarks

Answers:


3

对我来说,这很可能与关系数据库管理系统(RDBMS)的交换有关。在不同系统中,依赖数据库级联功能可能会出现问题,因此已在新的Resource模型中手动添加了逻辑。

同样可以在可见Mage_Cms_Model_Resource_Page::_beforeDelete()方法和Mage_PollMage_Review型号太多(虽然这些发生在_afterSave()方法。

在此处阅读有关Magento交换到RDBMS的更多信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.