我继承了Magento的项目,该项目的开发商旧是负责的。 有非常有限的Magento的经验,我想了解产品的集合和catalog/product
模型的工作。
具体来说,我不知道为什么收集和产品对象是如此之大?
我有这样的代码:
<?php $_productCollection = $this->getLoadedProductCollection(); ?>
<?php foreach ($_productCollection as $_product): ?>
<?php $_product = Mage::getModel( 'catalog/product' )->load( $_product->getId() ); ?>
<?php print $this->getLayout()->createBlock('mymodule_name/category_products_item')->setProduct($_product)->toHtml() ?>
<?php endforeach ?>
当我做print_r($_productCollection)
或print_r($_product)
,我得到的大量数据,当我真正想要的是一些产品属性(ID,名称,价格,图片URL等)。
我已经习惯了一个自定义的关系数据库平台,在这里,如果我需要使用的产品,我只是做一些超简单的像SELECT id,name,price FROM products;
! 我不能肯定我怎么会在Magento实现这一目标。 难道我创建一个自定义模式还是什么?
因此,谁能告诉我:
1)为什么上述目的如此巨大?
2)如果我只需要几个产品属性(如上),然后是有办法的对象仅限定于那些属性,以减少它们的大小?
3)是否有使用对象这样打了一个性能或内存?
非常感谢!
您可以通过多种方式从Magento的访问数据:
使用负载()=>它加载数据(属性)相对于模型ALL。 这是非常缓慢和性能杀手。 对于一个产品,你应该只在产品页面上使用的load()(因为所有你在该网页上使用的数据是相对于单个对象..这样你就可以加载它的全路)
利用收集=>当您需要检索对象的列表,你必须使用(至少)的集合。 它是由你来决定你要检索的属性列表中。 您可以添加属性来选择/过滤和收集将管理做SQL连接到EAV表等...在后台
使用自定义的SQL =>集合可以用复杂的物体时也可以很慢(集合初始化许多SQL连接表,你可能不需要)......从BDD访问数据的最后一个方法是在你的ResourceModel创建自己的SQL
在你看剧本,有一个巨大的错误:你加载一个foreach迭代内的完整模型上的集合。 你绝不能这样做,如果你要加载()的产品,我想那是因为你没有找到集合中的属性? 在这种情况下,你只需要修改该集合,以检索属性...
对于例如一个产品,Magento的提供了自动添加(或删除)属性的任何产品 - >集合实例化。 (见前端/产品/收集/属性的XML标签中Mage_Catalog的config.xml中)
这是becouse Magento的高速缓存的使用递归OMG体系,使关系数据库开发者的疯狂。 我是其中之一。 不过,按照我的理解,我得到它更好地利用法师:: getModel(“模型”) - > getCollection(),然后用PHP的SQL搜索时,Magento的店启动时,它使一个biggggggg缓存架构suply一些信息更快becouse的一些王,它是一种indexring的。
所以,如果你只想要几个字段,你可以使用.....-> getCollection() - > addAttributeToSelect( '名')。 对于前。
GL对你的Magento的理解。
文章来源: Need help understanding Magento product collection objects and the catalog/product model