在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