magento 什么是Mage :: getModel中的第二个参数

app/core/Mage/Sales/Model/Convert/Order.php第513行,有这样的规则:

$this->_order = Mage::getModel('sales/order')->load($this->getOnepage()->getQuote()->getId(), 'quote_id');

但是加载函数中的第二个参数在哪里?据我所知,一个参数可以获得主要字段的ID吗?这第二个参数quote_id不是主键,但它会加载记录$this->getOnepage()->getQuote()->getId()吗?

简短的回答是第二个参数需要您想要加载产品的字段名称。这允许您通过除id之外的其他内容加载它,但如果没有提供任何内容,则默认为id。如果您需要详细信息,请在下面了

如果您查看模块“sales / order”,app/code/core/Mage/Sales/Model/Order.php 您会发现它没有声明加载函数,所以我们将它的继承链向上移动Mage_Sales_Model_Abstract,它也没有加载函数。再增加一个继承级别来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;
}

如果查看包含_getResource的行,您将看到第二个参数传递给资源以帮助加载它。

如果您在app / code / core / Mage / Sales / Resource / Order.php中加载“sales / order”资源,您将找不到加载函数,因此您必须执行继承的几个步骤Mage_Core_Model_Resource_Db_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);
    $this->_afterLoad($object);

    return $this;
}

您可以在此函数中看到,如果未设置该字段,则使用$ this-> getIdFieldName()默认为id字段。

$ this-> getLoadSelect使用该字段根据该字段加载所需的对象。

题外

如果您打开资源模型我们正在查看app / code / core / Mage / Sales / Resource / Order.php,您将找不到我们正在寻找的功能。这意味着它必须继承该功能。查看类声明显示类Mage_Sales_Model_Resource_Order扩展Mage_Sales_Model_Resource_Order_Abstract。所以,我们转到它扩展的类,我们也没有找到该函数,所以我们看看并扩展了具有我们函数的Mage_Core_Model_Resource_Db_Abstract

赞(0)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

相关文章

Please Login to comment