cms/block
les entités ont une table de jointure cms_block_store
, les enregistrements dans lesquels un bloc donné est lié à un ou plusieurs magasins. Avant CE 1.6, le modèle de ressource Mage_Cms_Model_Mysql4_Block
(lien) ne supprime pas séparément ces enregistrements avant la suppression de l'entité, en s'appuyant efficacement sur la cascade pour les supprimer. Depuis 1.6.0.0, le modèle de ressource déplacé supprime explicitement ces enregistrements dans Mage_Cms_Model_Resource_Block::_beforeDelete
(lien) avant que l'entité ne soit supprimée de 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);
}
Existe-t-il une raison apparente pour effectuer cette opération dans deux requêtes distinctes plutôt que de s'appuyer sur la cascade comme auparavant?
Réponses:
Pour moi, cela a probablement à voir avec le passage à un système de gestion de base de données relationnelle (SGBDR). Le recours à la fonctionnalité de cascade de bases de données peut être problématique dans différents systèmes, de sorte que la logique a été ajoutée manuellement dans le nouveau modèle de ressource.
La même chose peut être vue dans la
Mage_Cms_Model_Resource_Page::_beforeDelete()
méthode et les modèlesMage_Poll
etMage_Review
aussi (bien que ceux-ci se produisent dans les_afterSave()
méthodes.En savoir plus sur le passage de Magento au SGBDR ici
la source