Domanda

Collezioni forniscono un comodo mezzo di ottenere un modello in bianco - per esempio:.

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

C'è qualche mezzo di fare questo da un modello esistente senza dover chiamare per la raccolta - in altre parole direttamente dal esempio? Qualcosa di simile a questo:

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

Mi rendo conto che potrei chiamare getCollection() sul prodotto prima -. Non so se questo ha un certo overhead

Modifica

Ovviamente $product = Mage::getModel('catalog/product'); produce il risultato desiderato. Ovviamente . Quello che sto cercando è un mezzo per ottenere un oggetto vuoto, senza reinstantiating il modello.

Forse ho solo bisogno di passare ad usare single per alleviare la mia mente.

È stato utile?

Soluzione

È possibile utilizzare reset ();

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

che chiama _clearData, se si controlla nel Mage_Catalog_Model_Product si può vedere che questa funzione resetta tutte le variabili.

Altri suggerimenti

Il metodo reset() è disponibile per Mage_Catalog_Model_Product, ma nel complesso, questo non è disponibile.

Si potrebbe aggiungere un metodo come questo:

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

Tuttavia, è non possono quindi chiamare:

$modelInstance->reset();

Si sarebbe dovuto chiamare:

$modelInstance = $modelInstance->reset();

A causa di questo, a mio parere, avere il proprio metodo di reset() sta per portare ad abusi, e / o può confondere altri sviluppatori. Si sta meglio fare qualcosa di simile:

$modelInstance = new $modelInstance;

Questo non funziona tramite la funzione clearInstance su Mage_Core_Model_Abstract. Questo sembra riferimenti chiari e dati più esso genera anche un evento:

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

Forse mi manca qualcosa qui però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top