Frage

Tut mir leid, dass ich frage, aber ich habe bei Google gesucht, aber keine Antwort gefunden.

In app/core/Mage/Sales/Model/Convert/Order.php In Zeile 513 gibt es diese Regel:

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

Aber wo ist der zweite Parameter in der Ladefunktion?Wie ich weiß, erhält ein Parameter die ID des Primärfelds, oder?Ist dieser zweite Parameter quote_id nicht der Primärschlüssel, aber der Datensatz wird geladen $this->getOnepage()->getQuote()->getId()?

Dank im Voraus.

War es hilfreich?

Lösung

Die kurze Antwort lautet, dass der zweite Parameter einen Feldnamen erwartet, nach dem Sie das Produkt laden möchten.Dadurch können Sie es mit etwas anderem als nur der ID laden, es wird jedoch standardmäßig die ID verwendet, wenn nichts angegeben wird.Weitere Informationen finden Sie unten, wenn Sie Einzelheiten wünschen:

Schauen Sie im Modul „Verkauf/Bestellung“ nach app/code/core/Mage/Sales/Model/Order.php Sie werden feststellen, dass keine Ladefunktion deklariert ist, also gehen wir in der Vererbungskette nach oben Mage_Sales_Model_Abstract und es hat auch keine Ladefunktion.Eine weitere Vererbungsebene nach oben Mage_Core_Model_Abstract zeigt uns diese Funktion:

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

Wenn Sie sich die Zeile ansehen, die _getResource enthält, werden Sie feststellen, dass dieser zweite Parameter an die Ressource übergeben wird, um das Laden zu unterstützen.

Wenn Sie die Ressource für „sales/order“ in app/code/core/Mage/Sales/Resource/Order.php laden, finden Sie keine Ladefunktion, daher müssen Sie bei der Vererbung ein paar Schritte nach oben gehen Mage_Core_Model_Resource_Db_Abstract So finden Sie die Ladefunktion:

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

Sie können in dieser Funktion sehen, dass, wenn das Feld nicht festgelegt ist, standardmäßig das ID-Feld verwendet wird, indem $this->getIdFieldName() verwendet wird.

$this->getLoadSelect verwendet das Feld, um das gewünschte Objekt basierend auf diesem Feld zu laden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top