跨境电商
经验交流分享

Magento EAV模型单独更新某一个属性

在Magento积分插件的更新中,遇到了一个非常有意思的问题。系统默认事件A会调用B方法,而我需要监听的一个事件中会调用C方法,C方法又会触发A事件。于是造成了无限循环。在C方法中,促发的是一个模型的*_save_after事件。

因为这里只需要更新该模型的一个属性,既然直接save()会造成死循环,是不是可以单独更新该模型的某一个属性呢?答案是肯定的。代码如下。所有EAV模型属性均可通过该方法更新。

[php]
public function updatePoints($points, $customer) {
$currentPoint = is_int($customer->getRewardsPoint()) ? $customer->getRewardsPoint() : 0;
$customer->setRewardsPoint((int)($currentPoint + $points));
$customer->getResource()->saveAttribute($customer, ‘rewards_point’);;
return;
}
[/php]

通过这种方式,单独更新了模型的某一个属性,并且不会触发系统模型定义的*_save_after事件。saveAttribute()方法在eav/entity_abstract模型中定义,有兴趣的朋友可以去详细了解内部操作。

赞(0)
未经允许不得转载:锐想 » Magento EAV模型单独更新某一个属性
分享到: 更多 (0)

评论 1

评论前必须登录!

 

  1. #1

    帅气! :mrgreen:

    ec_test5年前 (2014-05-20)

锐想电商 - 跨境电商经验交流分享

锐想无限