【发布时间】:2013-01-30 06:12:52
【问题描述】:
我正在服务器上运行一个脚本,以从 Magento 商店检索所有产品,然后将其拆分为特定的提要格式以用于购物引擎。
在获取属性及其值(例如颜色、大小等)时出现问题。
这个特定的商店有 24 种不同的属性类型和 1300 种产品,每次我运行脚本时,它都会使服务器的 CPU 负载高达 97% 左右,而这只是在我添加了检索产品的功能后才发生的属性代码和值。
我用于获取每个属性值的调用如下:
$_product->getResource()->getAttribute('bed_size')->getFrontend()->getValue($_product);
$_product->getResource()->getAttribute('bowl_size')->getFrontend()->getValue($_product);
$_product->getResource()->getAttribute('cage_size')->getFrontend()->getValue($_product);
$_product->getResource()->getAttribute('coat_size')->getFrontend()->getValue($_product);
这适用于所有具有一些属性的产品,但是当我开始处理所有 24 个属性时它会出现重大问题(不要问我为什么它们有这么多,不,不幸的是我无法控制更改/合并这些少)。
我需要知道是否有一种方法可以将所有产品属性和值加载到一个初始数组中,然后使用 PHP 为我完成处理工作。
我不能 100% 确定 Magento 在检索这些数据方面是如何工作的,但在我看来,每个 ->getValue($_product) 调用都在调用数据库以检索属性值,从而使数据库系统负载过大。
如果这是正确的,那么每次我运行脚本时都会产生 24 * 1300 次数据库调用,从而在一分钟内总共调用了 31,200 次。
如果我可以将所有属性的每个产品减少到一个数据库调用,然后使用 PHP 中的数组处理结果,那么我期望的服务器上的负载将变得易于管理,但正如我所说,不理解 100% Magento 如何处理这个我很难确定的信息。
附带说明一下,我在另一个站点上运行相同的脚本,它只有 3 个属性和类似数量的产品,它从来没有遇到过这样的问题。
我可以使用以下内容获取床尺寸值$_product->getBedSize,但是这会返回数字选项值,我相信因为这是一个选择框类型属性值,而不是文本框或文本区域类型,而不是文本值这是我需要的。
【问题讨论】:
标签: php magento attributes