Pregunta

Colecciones proporcionan un medio práctico de obtener un modelo en blanco - por ejemplo:.

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

¿Hay alguna manera de hacerlo a partir de un modelo existente sin tener que llamar para la recogida - en otras palabras directamente de la instancia? Algo como esto:

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

Me dan cuenta de que podría llamar getCollection() en el producto de la primera -. No estoy seguro si esto tiene algo de sobrecarga

Editar

Obviamente $product = Mage::getModel('catalog/product'); produce el resultado deseado. Obviamente . Lo que estoy buscando es un medio de conseguir un objeto blanco sin reinstantiating el modelo.

Tal vez sólo hay que cambiar a usar únicos para aliviar mi mente.

¿Fue útil?

Solución

Se puede usar reset ();

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

que llama _clearData, si marca en el Mage_Catalog_Model_Product se puede ver que esta función restablece todas las variables.

Otros consejos

El método reset() está disponible para Mage_Catalog_Model_Product sino como un todo, esto no está disponible.

Se podría añadir un método como este:

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

Sin embargo, no pueden a continuación, llamar a:

$modelInstance->reset();

Se tendría que llamar:

$modelInstance = $modelInstance->reset();

Debido a esto, en mi opinión, tener su propio método reset() va a conducir a un mal uso, y / o puede confundir a otros desarrolladores. Usted es mejor hacer algo como esto:

$modelInstance = new $modelInstance;

¿Esto no funciona a través de la función clearInstance en Mage_Core_Model_Abstract. Esto parece referencias y datos claros además de que también desencadena un evento:

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

Tal vez me estoy perdiendo algo aquí, sin embargo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top