Magento-cuándo usar Mage:: getResourceModel y Mage:: getModel


Acabo de empezar a usar Magento, y en particular sobre cómo funcionan los modelos y el work.

He utilizado estos tres métodos

Mage::getResourceModel()
Mage::getModel()
Mage::getSingleton()

¿Puede alguien decirme cuál es la diferencia entre cada uno de ellos?

He encontrado que getSingleton() comparte memoria mientras que getModel() usa memoria fresca para un nuevo objeto para la misma tabla que se está cargando.

He utilizado todos los métodos anteriores, pero no pude diferenciar entre ellos y cuándo es apropiado usar cuál.

 24
Author: dayuloli, 2014-01-16

2 answers

Differece perfecto con ejemplo para getsingleton y getmodel.

Mago:: getSingleton()

Mage::getSingleton() comprobará primero si la misma instancia de clase existe o no en la memoria. Si la instancia existe, devolverá el mismo objeto de la memoria. Así que Mage:: getSingleton () es más rápido que Mage::getModel ().

Ejemplo

$product1 = Mage::getSingleton('catalog/product');
$product2 = Mage::getSingleton('catalog/product');

$product1 y both product2 ambos compartirán la misma memoria del sistema operativo y devolverán solo una instancia cada uno tiempo.

Mago:: getModel()

Mage::getModel() creará una nueva instancia de un objeto cada vez que incluso ese objeto exista en la configuración.

Ejemplo

$product1 = Mage::getModel('catalog/product');
$product2 = Mage::getModel('catalog/product');

Produc product1 y produc product2 ambos tienen un instante diferente del mismo objeto y también ocupan una memoria diferente

Mage:: getResourceModel()

Por lo que sé, todas las colecciones en Magento son modelos de recursos. Son instanciados por

Mage::getResourceModel() 

O

Mage::getModel()->getCollection()

It realmente no importa qué función uses; esta última simplemente llama a la primera. El equipo de Magento simplemente eligió hacer que las colecciones formen parte del recurso, probablemente porque las colecciones necesitan consultar mucho la base de datos. Por lo general, no tendrá que llamar a Mage::getResourceModel() para nada más que colecciones.

Buen post de balajimca

 43
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-09 01:54:28

Además, si sabes qué atributos necesitas, usar Mage::getResourceModel con filtros es ~5 veces más eficiente tanto en velocidad como en memoria que cargar a través de, por ejemplo, Mage::getModel('catalog/product').

E. g. Método getResourceModel para recuperar un producto de la db

$collection = Mage::getResourceModel('catalog/product_collection')
    ->addFieldToFilter('entity_id', array($productId))
    ->addAttributeToSelect(array('name'))
    ->setPageSize(1);
$product = $collection->getFirstItem();

Cargar un modelo (esto cargará todos los atributos eav)

Mage::getModel('catalog/product')->load($productId);

[más información aquí][1] http://alanstorm.com/magento_advanced_orm_entity_attribute_value_part_1

 5
Author: Ben Incani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-25 01:36:21