有没有一种方法可以在一次调用中将所有Magento属性代码和值放入一个数组中


Is there a way to get all Magento Attribute Codes and Values into One Array In One Call?

我正在服务器上运行一个脚本,从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个数据库调用,在一分钟多的时间内总共调用31200个。

如果我可以将其减少到每个产品对所有属性的一个数据库调用,然后使用PHP中的数组来处理结果,那么我希望服务器上的负载将变得可控,但正如我所说,由于不完全理解Magento是如何处理这些信息的,我很难确定。

顺便说一句,我在另一个只有3个属性和类似数量的产品的网站上运行相同的脚本,它从未遇到过这样的问题。

我可以使用以下内容来获取床尺寸值$_product->getBedSize,但这会返回数字选项值,我相信这是因为这是一个选择框类型的属性值,而不是文本框或文本区域类型,而不是我需要的文本值。

哦,你正在获取所有属性ONE-BY-ONE的值?

最好使用下面的脚本获取所有属性值,并将其存储在一个以"attribute name"为键的数组中!

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