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()的值。但是比较它们真的很难,因为它们包含很多深层数组和对象。