Pour une entité cms / block, pourquoi les données subordonnées sont-elles supprimées explicitement de cms_page_store?

8

cms/blockles 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?

Benmarks
la source
L'équipe principale de Magento lit-elle ici?
Alex
J'espère bien! J'attendrai quelques jours et j'en enverrai quelques-uns si nous n'obtenons pas de bonnes réponses ici.
benmarks
peut-être que les stagiaires qui ont refactorisé le code ont pensé que c'était une bonne idée ... retirer certaines choses de la base de données, garder la logique au niveau du code.
FlorinelChis
alors il est temps de les cingler :-)
Alex
2
@Alex - Je serai avec eux à LA ce week-end et je mettrai à jour ici.
benmarks

Réponses:

3

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èles Mage_Pollet Mage_Reviewaussi (bien que ceux-ci se produisent dans les _afterSave()méthodes.

En savoir plus sur le passage de Magento au SGBDR ici

jharrison.au
la source