2
在後端編輯產品時,我需要知道它的任何數據是否已更改?Magento產品保存,如何檢測產品數據是否已更改
$ product-> hasDataChanges()總是返回true,即使我沒有修改任何字段。
在後端編輯產品時,我需要知道它的任何數據是否已更改?Magento產品保存,如何檢測產品數據是否已更改
$ product-> hasDataChanges()總是返回true,即使我沒有修改任何字段。
爲什麼$ product-> hasDataChanges()總是返回true,即使我沒有修改任何字段。
展望Varien_Object功能使用setData看來hasDataChanges總是被設置爲真實的,即使技術上數據沒有變化功能。
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($鍵= NULL ) 方法。
getOrigData()在初始化/填充時返回對象中的數據。
模型初始化後,您可以更新該數據,getData()將返回您當前在該對象中所擁有的內容。
查看Varien_Object(getOrigData,setOrigData),以便查看它的使用方式和原因。
我知道這是問題(設置$ this - > _ hasDataChanges = true而不檢查數據中的更改)爲什麼$ product-> hasDataChanges()總是返回true。我試圖比較$ product-> getData()和$ product-> getOrigData()的值。但由於它們包含大量深度數組和對象,所以比較它們非常棘手。 – 2014-12-03 06:54:32