O que é o segundo parâmetro no Mage::getModel
-
13-12-2019 - |
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.
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.