cms/block
Entitäten haben eine Verknüpfungstabelle cms_block_store
, die Datensätze, in denen ein bestimmter Block mit einem oder mehreren Speichern verknüpft ist. Vor CE 1.6 entfernt das Ressourcenmodell Mage_Cms_Model_Mysql4_Block
(Link) diese Datensätze nicht separat, bevor die Entität gelöscht wird, und verlässt sich effektiv auf die Kaskade, um sie zu entfernen. Ab 1.6.0.0 entfernt das verschobene Ressourcenmodell diese Datensätze explizit in Mage_Cms_Model_Resource_Block::_beforeDelete
(Link), bevor die Entität gelöscht wird aus 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);
}
Gibt es einen offensichtlichen Grund, diesen Vorgang in zwei separaten Abfragen durchzuführen, anstatt sich wie zuvor auf die Kaskade zu verlassen?
Antworten:
Für mich hat dies höchstwahrscheinlich mit dem Wechsel zu einem relationalen Datenbankverwaltungssystem (RDBMS) zu tun. Das Verlassen auf die Datenbankkaskadierungsfunktionalität kann in verschiedenen Systemen problematisch sein. Daher wurde die Logik im neuen Ressourcenmodell manuell hinzugefügt.
Das Gleiche gilt für die
Mage_Cms_Model_Resource_Page::_beforeDelete()
Methode und die ModelleMage_Poll
undMage_Review
(obwohl diese in den_afterSave()
Methoden vorkommen.Lesen Sie hier mehr über den Wechsel von Magento zu RDBMS
quelle