Obtenez nouvel élément vide sur la méthode de modèle
-
16-10-2019 - |
Question
Collections offrent un moyen pratique d'obtenir un modèle blanc - par exemple:.
$quote->getItemsCollection()->getNewEmptyItem();
Y at-il des moyens de le faire à partir d'un modèle existant sans avoir à appeler à la collection - autrement dit directement à partir de l'instance? Quelque chose comme ceci:
$product = Mage::getModel('catalog/product')->load(43);
$productNew = $product->getNewEmptyItem();
Je ne réalise que je pourrais appeler getCollection()
sur le premier produit -. Ne sais pas si cela a certains frais généraux
Modifier
Il est évident que $product = Mage::getModel('catalog/product');
produit le résultat souhaité. De toute évidence . Ce que je suis à la recherche est un moyen d'obtenir un objet vide sans reinstantiating le modèle.
Peut-être que je juste besoin de passer à l'utilisation des singletons pour soulager mon esprit.
La solution
Vous pouvez utiliser reset ();
Mage::getModel('catalog/product')->load(1)->reset();
qui appelle _clearData, si vous vérifiez dans le Mage_Catalog_Model_Product vous pouvez voir que cette fonction remet à zéro toutes les variables.
Autres conseils
La méthode reset()
est disponible pour Mage_Catalog_Model_Product
mais dans son ensemble, ce n'est pas disponible.
Vous pouvez ajouter une méthode comme ceci:
public function reset() {
return new self();
}
Cependant, vous ne peut pas puis appelez:
$modelInstance->reset();
Vous devrait appeler:
$modelInstance = $modelInstance->reset();
En raison de cela, à mon avis, avoir votre propre méthode de reset()
va conduire à une mauvaise utilisation, et / ou peut confondre d'autres développeurs. Vous êtes mieux de faire quelque chose comme ceci:
$modelInstance = new $modelInstance;
Est-ce fonctionne pas via la fonction clearInstance
sur Mage_Core_Model_Abstract
. Cela semble des références et des données claires, plus il déclenche également un événement:
Mage::dispatchEvent($this->_eventPrefix.'_clear', $this->_getEventData());
Peut-être que je manque quelque chose ici cependant.