Magento-自定义模型一对多关系



我正在为Magento编写一个自定义模块,我需要在两个表之间实现一对多关系。

最简单的解决方案是为每个表创建一个模型并分别保存数据,但我认为这种方法有一些局限性(我更喜欢将数据保存在一个事务中,而不是两个事务中。我希望在加载集合时加载组合数据,ecc)。

处理这种情况的最佳方法是什么?是否可以有一个从多个表中检索数据的模型类?

感谢

如果1-n关系严格来说是数据结构而不是实体结构,那么相邻表就不需要完整的ORM表示。

在核心代码中找到灵感和示例通常是很好的,所以请参考cms/pagecms/block实体,特别是它们的资源模型。以Mage_Cms_Model_Resource_Page::_getLoadSelect()方法为例,因为该方法是由资源模型调用来加载数据的:

protected function _getLoadSelect($field, $value, $object)
{
    $select = parent::_getLoadSelect($field, $value, $object);
    $storeId = $object->getStoreId();
    if ($storeId) {
        $select->join(
                    array('cps' => $this->getTable('cms/page_store')),
                    $this->getMainTable().'.page_id = `cps`.page_id'
                )
                ->where('is_active=1 AND `cps`.store_id IN (' . Mage_Core_Model_App::ADMIN_STORE_ID . ', ?) ', $storeId)
                ->order('store_id DESC')
                ->limit(1);
    }
    return $select;
}

请注意连接,并注意它们分别有一个实体表(cms_pagecms_block)——顺便说一句,这是ORM所期望的——但还有其他表包含用于存储数据的cms实体。(cms_page_storecms_block_store)。后两个表中的记录不是由它们自己的ORM类表示的,而是由cms/pagecms/block模型的资源类更新、删除或连接以进行加载。

同样,是否通过指定的ORM类处理SQL的决定因素来自业务域——如果"许多"表中的记录表示业务域中需要表示或复杂表示的内容,请通过ORM访问它们。

最新更新