Вопрос

Извините за вопрос, но я искал в Google, но не нашел ответа.

В app/core/Mage/Sales/Model/Convert/Order.php в строке 513 есть такое правило:

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

Но где же второй параметр функции загрузки?Насколько я знаю, один параметр получает идентификатор основного поля, верно?Это второй параметр quote_id не первичный ключ, но он загрузит запись с $this->getOnepage()->getQuote()->getId()?

Заранее спасибо.

Это было полезно?

Решение

Короткий ответ: второй параметр ожидает имя поля, по которому вы хотите загрузить продукт.Это позволяет вам загружать его не только по идентификатору, но по умолчанию используется идентификатор, если ничего не указано.Более подробная информация приведена ниже, если вам нужны подробности:

Если заглянуть в модуль «продажи/заказ» в 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, вы не найдете функцию загрузки, поэтому вам придется пройти несколько шагов вверх по наследованию, чтобы 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;
}

В этой функции вы можете видеть, что если поле не установлено, то по умолчанию используется поле id, используя $this->getIdFieldName().

$this->getLoadSelect использует это поле для загрузки желаемого объекта на основе этого поля.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top