【问题标题】:Need help understanding Magento product collection objects and the catalog/product model需要帮助了解 Magento 产品集合对象和目录/产品模型
【发布时间】:2012-10-17 14:46:23
【问题描述】:

我继承了一个老开发人员负责的 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) 以这种方式使用对象是否会对性能或内存造成影响?

非常感谢!

【问题讨论】:

    标签: php mysql magento entity-attribute-value


    【解决方案1】:

    您有几种方法可以从 magento 访问数据:

    • 使用 load() => 加载与模型相关的所有数据(属性)。它非常缓慢且性能杀手。对于产品,您应该仅在产品页面上使用 load() (因为您将在该页面上使用的所有数据都与单个对象相关......因此您可以完整地加载它)

    • 使用集合 => 当您需要检索对象列表时,您必须(至少)使用集合。由您决定要检索的属性列表。您可以将属性添加到选择/过滤器,并且该集合将设法在后台对 EAV 表等进行 SQL 连接

    • 使用自定义 SQL => 集合在处理复杂对象时可能会很慢(一个集合初始化许多 SQL 连接到您可能不需要的表)...从 BDD 访问数据的最后一种方法是创建自己的ResourceModel 中的 SQL

    在您显示的脚本中,有一个巨大的错误:您在 foreach 中加载了一个完整的模型,并迭代了一个集合。你绝不能这样做,如果你必须加载()产品,我认为这是因为你没有在集合中找到一个属性?在这种情况下,您只需修改集合即可检索属性...

    例如,对于产品,magento 提供了一种自动添加(或删除)属性到您实例化的任何产品->集合的方法。 (见 Mage_Catalog 的 config.xml 中的 frontend/product/collection/attributes XML 标签)

    【讨论】:

      【解决方案2】:

      这是因为 magento 使用缓存递归 OMG 系统,让关系数据库开发人员为之疯狂。我就是其中之一。 但是,据我了解,我认为最好使用 Mage::getModel('model')->getCollection(),然后使用 php 进行一些 sql 搜索之王,因为当 Magento 商店启动时,它会创建一个 biggggggg 缓存模式以更快地提供一些信息,这是一种索引环。

      所以,如果你只想要几个字段,你可以使用.....->getCollection()->addAttributeToSelect('name')。例如。

      了解您对 magento 的理解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-09
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2011-04-22
        相关资源
        最近更新 更多