cms / blockエンティティの場合、下位データがcms_page_storeから明示的に削除されるのはなぜですか?


8

cms/blockエンティティには結合テーブルcms_block_storeがあります。これは、特定のブロックを1つ以上のストアにリンクするレコードです。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);
}

以前のようにカスケードに依存するのではなく、2つの別々のクエリでこの操作を実行する明らかな理由はありますか?


Magentoコアチームはここを読んでいますか?
アレックス

そう願います!ここで良い答えが得られない場合は、数日待って、そのうちのいくつかにpingします。
ベンマークス2013

コードをリファクタリングしたインターンは、これは良いアイデアだと思ったかもしれません...データベースからいくつかのものを移動し、ロジックをコードレベルに保ちます。
FlorinelChis 2013

pingする時間です:-)
Alex

2
@Alex-私は今週末LAで彼らと付き合い、ここで更新します。
benmarks 2013年

回答:


3

私にとって、これはおそらくリレーショナルデータベース管理システム(RDBMS)へのスワップに関係しています。データベースのカスケード機能に依存すると、さまざまなシステムで問題が発生する可能性があるため、新しいリソースモデルにロジックを手動で追加しました。

同じことがMage_Cms_Model_Resource_Page::_beforeDelete()メソッドとMage_PollMage_Reviewモデルにも見られます(これらは_afterSave()メソッドで発生しますが)。

MagentoからRDBMSへのスワップについて詳しくは、こちらをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.