Magento产品保存,如何检测产品数据是否已更改

时间:2014-12-03 06:11:47

标签: magento

在后端编辑产品时,我需要知道其中的任何数据是否已被更改?

$ product-> hasDataChanges()总是返回true,即使我没有修改任何字段。

1 个答案:

答案 0 :(得分:4)

为什么$ product-> hasDataChanges()总是返回true,即使我没有修改任何字段。

查看Varien_Object函数 setData 函数,即使技术上数据没有变化, hasDataChanges 也始终设置为true。

public function setData($key, $value=null)
{
    $this->_hasDataChanges = true;
    if(is_array($key)) {
        $this->_data = $key;
        $this->_addFullNames();
    } else {
        $this->_data[$key] = $value;
        if (isset($this->_syncFieldsMap[$key])) {
            $fullFieldName = $this->_syncFieldsMap[$key];
            $this->_data[$fullFieldName] = $value;
        }
    }
    return $this;
}

<强>解决方案:

当你有一个Mage_Core_Model_Abstract类型的模型时,你可以使用公共函数getOrigData($ key = null)方法轻松获取保存的先前数据(原始数据)。

getOrigData()在初始化/填充对象时返回对象中的数据。

初始化模型后,您可以更新该数据,getData()将返回您当前在该对象中的内容。

查看Varien_Object(getOrigData,setOrigData),以便了解它的使用方式和原因。