gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:13:05 25 4
gpt4 key购买 nike

我正在为 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-entity-to-store 数据. ( cms_page_storecms_block_store )。后两个表中的记录不是由它们自己的 ORM 类表示的,而是由 cms/page 更新、删除或连接以进行加载。和 cms/block模型的资源类。

同样,是否通过指定的 ORM 类处理 SQL 的决定因素来自业务领域——如果“许多”表中的记录代表业务领域中需要表示或复杂表示的事物,则通过 ORM 访问它们。

关于Magento - 自定义模型一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com