php - 需要帮助理解 Magento 产品集合对象和目录/产品模型

标签 php mysql magento entity-attribute-value

我继承了一个老开发人员负责的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 访问数据:

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

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

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

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

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

关于php - 需要帮助理解 Magento 产品集合对象和目录/产品模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936989/

相关文章:

java - 如何从 SOAP api 获取 Magento 产品 URL

magento - 从购物车页面的自定义选项中删除价格文本

php - 将 Magento 连接到 Google Cloud SQL 作为 MySQL 服务器错误

php - 检查给定日期是否已过

php - Symfony 4.4 Auth0如何从应用程序中完全注销用户

php - 除非我销毁不存在的 session ,否则不会存储 session ?

100 个用户的 JAVA MYSQL 聊天性能问题

php - 使用另一个表的字段自定义搜索 sugarcrm

php - php中如何知道记录已经更新成功

mysql - 我的 SQL 工作台在 EER 图中创建多对多关系