我需要添加一个php脚本来从一个cron作业运行,该作业将添加两个Magento属性值并将结果存储为MySQL数据库中的第三个属性。
任何帮助将不胜感激。我附上了一个屏幕截图,希望澄清事情。
答案 0 :(得分:2)
在处理EAV模型时直接在SQL中工作很难。省下自己的努力,改用Magento的课程。最小的cron脚本可能如下所示:
<?php
require 'app/Mage.php';
umask(0);
Mage::app();
$products = Mage::getModel('catalog/product')->getCollection();
foreach ($products as $product) {
$product->setSumValue(
$product->getFirstValue() + $product->getSecondValue()
)
->save();
}
Magento提供了神奇的方法,因此您可以使用getFirstValue()
,getSecondValue()
和setSumValue()
等语法来引用名为first_value
,second_value
和{{1}的属性}} 分别。使用实际属性的名称而不是数字141等。
答案 1 :(得分:0)
我认为应该这样做,但我没有测试过。
基本过程是创建一个临时表,其中包含您关注的实体的总和值,然后使用这些值更新正确的属性行。
请注意,这里不需要php,只有SQL。您当然可以使用php来发出查询。
UPDATE
catalog_product_entity_decimal,
(SELECT entity_id, SUM(value) AS summedvalue FROM catalog_product_entity_decimal as cped
WHERE attribute_id IN (145, 146)
AND EXISTS (SELECT 1 FROM catalog_product_entity_decimal WHERE entity_id=cped.entity_id and attribute_id=141)
GROUP BY entity_id
) AS sums
SET catalog_product_entity_decimal.value = sums.summedvalue
WHERE catalog_product_entity_decimal.entity_id=sums.entity_id
AND catalog_product_entity_decimal.attribute_id=141;
这会构建一个类似于此的中间表sums
(基于表截图中的数据):
entity_id | summedvalue
1 | 12
2 | 0
如果没有带有attribute_id = 141的行的entity_id,那个entity_id在这个sums
表中将没有行 - 这是由EXISTS()条件确保的。
然后我们将catalog_product_entity_decimal
表(我将其缩写为CPED)更新为在entity_id上加sums
。
CPED.entity_id | CPED.attribute_id | sums.entity_id | sums.summedvalue
1 | 145 | 1 | 12
2 | 145 | 2 | 0
SET CPED.value = sums.summedvalue
执行实际设置。