Ottenere nuovo elemento vuoto sul metodo dei modelli
-
16-10-2019 - |
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.
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ò.