Domanda

Scusate la domanda, ma ho cercato su google ma non ho trovato la risposta.

In app/core/Mage/Sales/Model/Convert/Order.php alla linea 513 c'è questa regola:

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

Ma dov'è il secondo parametro nella funzione di caricamento?Come so, un parametro ottiene l'ID del campo primario, giusto?È questo il secondo parametro quote_id non la chiave primaria, ma caricherà il record $this->getOnepage()->getQuote()->getId()?

Grazie in anticipo.

È stato utile?

Soluzione

La risposta breve è che il secondo parametro prevede un nome di campo in base al quale desideri caricare il prodotto.Ciò ti consente di caricarlo con qualcosa di diverso dal semplice id, ma viene impostato automaticamente sull'id se non viene fornito nulla.Maggiori informazioni sono riportate di seguito se desideri dettagli:

Se guardi nel modulo "vendite/ordini" in app/code/core/Mage/Sales/Model/Order.php scoprirai che non ha una funzione di caricamento dichiarata, quindi risaliamo la catena della sua eredità Mage_Sales_Model_Abstract e inoltre non ha una funzione di caricamento.Fino a un ulteriore livello di eredità Mage_Core_Model_Abstract ci mostra questa funzione:

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 guardi la riga che contiene _getResource, vedrai che questo secondo parametro viene passato alla risorsa per aiutarla a caricarla.

Se carichi la risorsa per "sales/order" in app/code/core/Mage/Sales/Resource/Order.php non troverai una funzione di caricamento, quindi devi fare un paio di passaggi nell'ereditarietà per Mage_Core_Model_Resource_Db_Abstract per trovare la funzione di carico:

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

Puoi vedere in questa funzione che se il campo non è impostato, per impostazione predefinita viene utilizzato il campo id utilizzando $this->getIdFieldName().

$this->getLoadSelect utilizza il campo per caricare l'oggetto desiderato in base a quel campo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top