Question

Désolé de demander, mais j'ai cherché sur Google, mais je n'ai pas trouvé la réponse.

Dans app/core/Mage/Sales/Model/Convert/Order.php à la ligne 513 il y a cette règle :

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

Mais où se trouve le deuxième paramètre dans la fonction de chargement ?Comme je le sais, un paramètre obtient l'ID du champ principal, n'est-ce pas ?Est-ce que ce deuxième paramètre quote_id pas la clé primaire, mais il chargera l'enregistrement avec $this->getOnepage()->getQuote()->getId()?

Merci d'avance.

Était-ce utile?

La solution

La réponse courte est que le deuxième paramètre attend un nom de champ par lequel vous souhaitez charger le produit.Cela vous permet de le charger avec autre chose qu'un simple identifiant, mais la valeur par défaut est l'identifiant si rien n'est fourni.Plus d’informations ci-dessous si vous souhaitez des détails :

Si vous regardez dans le module "ventes/commandes" dans app/code/core/Mage/Sales/Model/Order.php vous constaterez qu'il n'a pas de fonction de chargement déclarée, nous remontons donc la chaîne de son héritage jusqu'à Mage_Sales_Model_Abstract et il n'a pas non plus de fonction de chargement.Montez un niveau d'héritage supplémentaire pour Mage_Core_Model_Abstract nous montre cette fonction :

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 vous regardez la ligne qui contient _getResource, vous verrez que ce deuxième paramètre est passé à la ressource pour faciliter son chargement.

Si vous chargez la ressource pour "sales/order" dans app/code/core/Mage/Sales/Resource/Order.php, vous ne trouverez pas de fonction de chargement, vous devez donc monter quelques étapes dans l'héritage pour Mage_Core_Model_Resource_Db_Abstract pour trouver la fonction de chargement :

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

Vous pouvez voir dans cette fonction que si le champ n'est pas défini, il est par défaut le champ id en utilisant $this->getIdFieldName().

$this->getLoadSelect utilise le champ pour charger l'objet que vous désirez en fonction de ce champ.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top