Frage

Sammlungen bieten ein praktisches Mittel, um ein leeres Modell zu erhalten - z. B.:

$quote->getItemsCollection()->getNewEmptyItem();

Gibt es eine Möglichkeit, dies von einem vorhandenen Modell zu tun, ohne die Sammlung fordern zu müssen - mit anderen Worten direkt aus der Instanz? Etwas wie das:

$product = Mage::getModel('catalog/product')->load(43);
$productNew = $product->getNewEmptyItem();

Mir ist klar, dass ich anrufen kann getCollection() Zuerst auf dem Produkt - nicht sicher, ob dies einen Overhead hat.

Bearbeiten:

Offensichtlich $product = Mage::getModel('catalog/product'); erzeugt das gewünschte Ergebnis. Offensichtlich. Was ich suche, ist ein Mittel, um ein leeres Objekt zu bekommen, ohne das Modell neu zu bestimmen.

Vielleicht muss ich nur zu Singletons wechseln, um meinen Verstand zu erleichtern.

War es hilfreich?

Lösung

Sie können Reset () verwenden;

Mage::getModel('catalog/product')->load(1)->reset();

Wenn Sie in mage_catalog_model_product einchecken, können Sie feststellen, dass diese Funktion alle Variablen zurücksetzt.

Andere Tipps

Das reset() Methode ist verfügbar für Mage_Catalog_Model_Product Aber insgesamt ist das nicht verfügbar.

Sie können eine solche Methode hinzufügen:

public function reset() {
    return new self();
}

Aber du kann nicht Dann ruf an:

$modelInstance->reset();

Sie müssten anrufen:

$modelInstance = $modelInstance->reset();

Aus diesem Grund meiner Meinung nach haben Sie Ihre eigenen reset() Die Methode wird zu Missbrauch führen und/oder andere Entwickler verwirren. Sie sind besser dran, so etwas zu tun:

$modelInstance = new $modelInstance;

Funktioniert das nicht über die clearInstance Funktion auf Mage_Core_Model_Abstract. Dies scheint Referenzen und Daten zu löschen, und es feuert auch ein Ereignis aus:

Mage::dispatchEvent($this->_eventPrefix.'_clear', $this->_getEventData());

Vielleicht fehlt mir hier etwas.

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