首页 文章

在Magento 1.9.2中,load()如何在EAV模型中工作?

提问于
浏览
2

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

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

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)abstract class Mage_Core_Model_Resource_Db_Abstract extends 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);

请帮帮我 .

1 回答

  • 2

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

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

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

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

相关问题