Wozu dient der zweite Parameter in Mage::getModel?
-
13-12-2019 - |
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.
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.