Per un'entità cms / block, perché i dati subordinati vengono eliminati esplicitamente da cms_page_store?


8

cms/blockle entità hanno una tabella di join cms_block_store, i record in cui collegano un determinato blocco a uno o più negozi. Prima di CE 1.6, il modello di risorsa Mage_Cms_Model_Mysql4_Block(collegamento) non rimuoveva separatamente questi record prima che l'entità venisse eliminata, facendo affidamento sulla cascata per rimuoverli. A partire dalla 1.6.0.0, il modello di risorsa trasferito rimuove esplicitamente questi record in Mage_Cms_Model_Resource_Block::_beforeDelete(collegamento) prima che l'entità venga eliminata da 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);
}

C'è una ragione apparente per eseguire questa operazione in due query separate anziché fare affidamento sulla cascata come prima?


Il core team di Magento sta leggendo qui?
— Alex,

Lo spero! Aspetterò un paio di giorni e eseguirò il ping di alcuni di essi se non otteniamo buone risposte qui.
— benmarks

forse gli stagisti che hanno riformulato il codice hanno pensato che fosse una buona idea ... spostare alcune cose fuori dal database, mantenere la logica a livello di codice.
— FlorinelChis,

così tempo di ping loro :-)
— Alex

2
@Alex - Sarò in giro con loro a Los Angeles questo fine settimana e aggiornerò qui.
— Benmark

Risposte:


3

Per me questo molto probabilmente ha a che fare con lo scambio con un sistema di gestione di database relazionali (RDBMS). Affidarsi alla funzionalità a cascata del database potrebbe essere problematico in diversi sistemi, quindi la logica è stata aggiunta manualmente nel nuovo modello di risorsa.

Lo stesso può essere visto nel Mage_Cms_Model_Resource_Page::_beforeDelete()metodo e anche nei modelli Mage_Polle Mage_Review(anche se questi si verificano nei _afterSave()metodi.

Maggiori informazioni sullo scambio di Magento su RDBMS qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.