0

我在服务器上运行脚本以从 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,但是这会返回数字选项值,我相信这是因为这是一个选择框类型属性值,而不是文本框或文本区域类型,而不是我需要的文本值。

4

1 回答 1

1

哦,您正在逐个获取所有属性的值?

最好使用以下脚本获取所有属性值并将其存储在以“属性名称”为键的数组中!

$attrValues = array();
$attributes = $product->getAttributes();
foreach ($attributes as $attribute) {
    if ($attribute->getIsVisibleOnFront()) {
        $value = $attribute->getFrontend()->getValue($product);
        $attrValues[$attribute->getAttributeCode()] = $value;
    }
}

print_r($attrValues);
于 2013-02-14T13:14:02.100 回答