需要帮助理解Magento的产品集合对象和目录/产品型号(Need help understandi

2019-09-26 15:06发布

我继承了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)是否有使用对象这样打了一个性能或内存?

非常感谢!

Answer 1:

您可以通过多种方式从Magento的访问数据:

  • 使用负载()=>它加载数据(属性)相对于模型ALL。 这是非常缓慢和性能杀手。 对于一个产品,你应该只在产品页面上使用的load()(因为所有你在该网页上使用的数据是相对于单个对象..这样你就可以加载它的全路)

  • 利用收集=>当您需要检索对象的列表,你必须使用(至少)的集合。 它是由你来决定你要检索的属性列表中。 您可以添加属性来选择/过滤和收集将管理做SQL连接到EAV表等...在后台

  • 使用自定义的SQL =>集合可以用复杂的物体时也可以很慢(集合初始化许多SQL连接表,你可能不需要)......从BDD访问数据的最后一个方法是在你的ResourceModel创建自己的SQL

在你看剧本,有一个巨大的错误:你加载一个foreach迭代内的完整模型上的集合。 你绝不能这样做,如果你要加载()的产品,我想那是因为你没有找到集合中的属性? 在这种情况下,你只需要修改该集合,以检索属性...

对于例如一个产品,Magento的提供了自动添加(或删除)属性的任何产品 - >集合实例化。 (见前端/产品/收集/属性的XML标签中Mage_Catalog的config.xml中)



Answer 2:

这是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