Pergunta

Desculpe por perguntar, mas eu procurei no google, mas não consegue encontrar a resposta.

No app/core/Mage/Sales/Model/Convert/Order.php na linha 513 existe essa regra:

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

Mas onde está o segundo parâmetro na função de carga?Como eu sei que, um parâmetro obtém o ID do campo primário certo?É este segundo parâmetro quote_id não a chave primária, mas ele irá carregar o registro com $this->getOnepage()->getQuote()->getId()?

Obrigado antecipadamente.

Foi útil?

Solução

A resposta curta é que o segundo parâmetro espera um nome de campo que você deseja carregar o produto.Isso permite que você carregar-lo por algo que não seja apenas de identificação, mas o padrão é o id, se nada for fornecido.Mais informações abaixo se você quiser mais detalhes:

Se você olhar no módulo de "sales/order" em app/code/core/Mage/Sales/Model/Order.php você vai descobrir que ele não tem uma função de carga declarada, para que ir até a cadeia de herança para Mage_Sales_Model_Abstract e ele também não tem uma função de carga.Até mais um nível de herança para Mage_Core_Model_Abstract mostra-nos esta função:

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;
}

Se você olhar para a linha que contém _getResource, você vai ver que o segundo parâmetro é passado para o recurso para ajudar a carregá-lo.

Se você carregar o recurso de "sales/order" em app/code/core/Mage/Sales/Resource/Order.php você não vai encontrar uma função de carga, portanto, você deve ir a um par de passos até que a herança para Mage_Core_Model_Resource_Db_Abstract para encontrar a função de carga:

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;
}

Você pode ver nesta função que se o campo não é definido, então ele assume que o campo id usando $this->getIdFieldName().

$this->getLoadSelect usa o campo para carregar o objeto que você desejar com base nesse campo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top