我刚开始使用Magento,特别是关于模型和ORM的工作原理。
我已经使用了这三种方法
Mage::getResourceModel()
Mage::getModel()
Mage::getSingleton()谁能告诉我它们之间的区别是什么?
我发现getSingleton()共享内存,而getModel()为加载的同一个表的新对象使用新内存。
我已经使用了上面所有的方法,但无法区分它们以及什么时候适合使用哪种方法。
发布于 2014-01-16 13:29:49
对于getsingleton和getmodel.,与示例完全不同
Mage::getSingleton()
getSingleton()将首先检查内存中是否存在相同的类实例。如果实例存在,那么它将从内存中返回相同的对象。所以Mage::getSingleton()比Mage::getModel()快。
示例
$product1 = Mage::getSingleton('catalog/product');
$product2 = Mage::getSingleton('catalog/product');$product1和$product2将共享相同的操作系统内存,并且每次只返回一个实例。
Mage::getModel()
getModel()每次都会创建一个对象的新实例,即使这样的对象存在于配置中。
示例
$product1 = Mage::getModel('catalog/product');
$product2 = Mage::getModel('catalog/product');$product1和$product2都具有相同对象的不同实例,并且占用不同的内存
Mage::getResourceModel()
据我所知,Magento中的所有集合都是资源模型。它们实例化为
Mage::getResourceModel() 或
Mage::getModel()->getCollection()使用哪个函数并不重要;后一个函数只是调用第一个函数。Magento团队简单地选择将集合作为资源的一部分,可能是因为集合需要大量查询数据库。通常,除了集合之外,您不需要调用Mage::getResourceModel()。
balajimca的好帖子
发布于 2016-02-25 09:36:22
此外,如果你知道你需要什么属性,那么使用带有过滤器的Mage::getResourceModel在速度和内存上都比通过Mage::getModel('catalog/product')加载快5倍。
例如,从数据库中检索产品的getResourceModel方法
$collection = Mage::getResourceModel('catalog/product_collection')
->addFieldToFilter('entity_id', array($productId))
->addAttributeToSelect(array('name'))
->setPageSize(1);
$product = $collection->getFirstItem();加载模型(这将加载所有eav属性)
Mage::getModel('catalog/product')->load($productId);更多信息请点击此处http://alanstorm.com/magento_advanced_orm_entity_attribute_value_part_1
https://stackoverflow.com/questions/21153973
复制相似问题