Для сущности 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);
}

Есть ли очевидная причина для выполнения этой операции в двух отдельных запросах вместо того, чтобы полагаться на каскад, как это было раньше?

benmarks
источник
Основная команда Magento читает здесь?
Alex
Я надеюсь на это! Я подожду пару дней и пингую некоторые из них, если мы не получим здесь хороших ответов.
отметки
возможно, стажеры, которые реорганизовали код, думали, что это хорошая идея ... убрать некоторые вещи из базы данных, сохранить логику на уровне кода.
FlorinelChis
так что время пинговать их :-)
Алекс
2
@ Алекс - я буду болтаться с ними в Лос-Анджелесе в эти выходные и буду обновлять здесь.
отметки

Ответы:

3

Для меня это, скорее всего, связано со свопом к системе управления реляционными базами данных (RDBMS). Полагаться на функциональность каскадирования базы данных может быть проблематично в разных системах, поэтому логика была добавлена ​​вручную в новой модели ресурсов.

То же самое можно увидеть в Mage_Cms_Model_Resource_Page::_beforeDelete()методе а Mage_Pollи Mage_Reviewмодели слишком (хотя они имеют место в _afterSave()методах.

Узнайте больше о свопе Magento к RDBMS здесь

jharrison.au
источник