在后端编辑产品时,我需要知道其中的任何数据是否已被更改?
$ product-> hasDataChanges()总是返回true,即使我没有修改任何字段。
答案 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),以便了解它的使用方式和原因。