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

Man*_*P M 3 magento

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

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

Har*_*rit 5

为什么即使我没有修改任何字段,$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;
}
Run Code Online (Sandbox Code Playgroud)

解决方案:

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

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

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

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