magento - load() 在 Magento 1.9.2 的 EAV 模型中如何工作?

标签 magento magento-1.9

$product = Mage::getModel('catalog/product')->load($this->getProductId());

load() 将进入 Mage_Core_Model_Abstract 内部 load() 函数,

public function load($id, $field=null)
{
    $this->_beforeLoad($id, $field);
    $this->_getResource()->load($this, $id, $field);
    $this->_afterLoad();
    $this->setOrigData();
    $this->_hasDataChanges = false;
    return $this;
}

现在应该转到定义加载过程的抽象类 Mage_Catalog_Model_Resource_Abstract 扩展 Mage_Eav_Model_Entity_Abstract:

public function load($object, $entityId, $attributes = array())
    {
        Varien_Profiler::start('__EAV_LOAD_MODEL__');
        /**
         * Load object base row data
         */
        $select  = $this->_getLoadRowSelect($object, $entityId);
        $row     = $this->_getReadAdapter()->fetchRow($select);

        ...

        if (empty($attributes)) {
            $this->loadAllAttributes($object);
        } else {
            foreach ($attributes as $attrCode) {
                $this->getAttribute($attrCode);
            }
        }

        $this->_loadModelAttributes($object);

        ...
    } 

但我不明白怎么办

$this->_getResource()->load($this, $id, $field); in Mage_Core_Model_Abstract

连接到抽象类Mage_Catalog_Model_Resource_Abstract???

因为load($this, $id, $field)将会抽象类Mage_Core_Model_Resource_Db_Abstract扩展Mage_Core_Model_Resource_Abstract:

public function load(Mage_Core_Model_Abstract $object, $value, $field = null)
{
    if (is_null($field)) {
        $field = $this->getIdFieldName();
    }

    $read = $this->_getReadAdapter();
    if ($read && !is_null($value)) {
        $select = $this->_getLoadSelect($field, $value, $object);
        $data = $read->fetchRow($select);

        if ($data) {
            $object->setData($data);
        }
    }

    $this->unserializeFields($object);

请帮帮我。

最佳答案

产品模型(catalog/product)中有_construct方法。当创建对象时会触发此方法。它显示了要使用的资源模型:

$this->_init('catalog/product');

接下来,在load方法的Mage_Core_Model_Abstract中,有一个表达式$this->_getResource()。它可以带回类的对象 Mage_Catalog_Model_Resource_Product(又继承自 Mage_Catalog_Model_Resource_Abstract)。

基本上,每个模型都可以有自己的资源模型和自己的类。

关于magento - load() 在 Magento 1.9.2 的 EAV 模型中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35315770/

相关文章:

mysql - Magento 无法将产品关联、追加销售、交叉销售。显示错误

magento - 如何在 Magento 中仅允许特定产品免费送货?

javascript - 如何应用自定义 CSS 和 Javascript 特定的 CMS 页面 Magento

Magento Admin 在更新订单时停留在 "Please wait"

php - 无法保存库存项目。请再试一次。 Magento 2.4.0

Magento Gif 上传

xml - 结帐时出错 - AddBodyClass

magento - magento 管理面板中的颜色选择器

php - Magento "Special Price From Date"不工作

magento - 升级到 Magento 1.9 后的 fatal error