Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento产品保存,如何检测产品数据是否已更改_Magento - Fatal编程技术网

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

Magento产品保存,如何检测产品数据是否已更改,magento,Magento,在后端编辑产品时,我需要知道它的任何数据是否已更改 $product->hasDataChanges()即使我没有修改任何字段,也始终返回true。为什么$product->hasDataChanges()即使我没有修改任何字段,也始终返回true。 查看Varien_对象函数setData函数,似乎hasDataChanges总是设置为true,即使从技术上讲数据没有变化 public function setData($key, $value=null) { $this->_h

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


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

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

查看Varien_对象函数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_对象(getOrigData、setOrigData),以便了解它的使用方式和原因。

我知道这就是问题所在(设置$this->_hasDataChanges=true而不检查数据中的更改)为什么$product->hasDataChanges()总是返回true。我试图比较$product->getData()和$product->getOrigData()的值。但是比较它们真的很难,因为它们包含很多深层数组和对象。