Pregunta

Perdón por preguntar, busqué en Google y no encontré la respuesta.

En app/core/Mage/Sales/Model/Convert/Order.php en la línea 513 existe esta regla:

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

Pero, ¿dónde está el segundo parámetro en la función de carga?Como sé, un parámetro obtiene el ID del campo principal, ¿verdad?¿Es este segundo parámetro? quote_id no es la clave principal, pero cargará el registro con $this->getOnepage()->getQuote()->getId()?

Gracias de antemano.

¿Fue útil?

Solución

La respuesta corta es que el segundo parámetro espera un nombre de campo por el que desea cargar el producto.Esto le permite cargarlo con algo que no sea solo id, pero el valor predeterminado es id si no se proporciona nada.Más información está a continuación si desea detalles:

Si buscas en el módulo "ventas/pedido" en app/code/core/Mage/Sales/Model/Order.php Encontrarás que no tiene una función de carga declarada, por lo que subimos en la cadena de su herencia hasta Mage_Sales_Model_Abstract y además no tiene función de carga.Subir un nivel más de herencia a Mage_Core_Model_Abstract nos muestra esta función:

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

Si observa la línea que contiene _getResource, verá que este segundo parámetro se pasa al recurso para ayudar a cargarlo.

Si carga el recurso para "ventas/pedido" en app/code/core/Mage/Sales/Resource/Order.php no encontrará una función de carga, por lo que debe avanzar un par de pasos en la herencia para Mage_Core_Model_Resource_Db_Abstract para encontrar la función 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;
}

Puede ver en esta función que si el campo no está configurado, el valor predeterminado es el campo de identificación usando $this->getIdFieldName().

$this->getLoadSelect usa el campo para cargar el objeto que desea en función de ese campo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top