2014-12-03 90 views

回答

3

爲什麼$ 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),以便查看它的使用方式和原因。

+0

我知道這是問題(設置$ this - > _ hasDataChanges = true而不檢查數據中的更改)爲什麼$ product-> hasDataChanges()總是返回true。我試圖比較$ product-> getData()和$ product-> getOrigData()的值。但由於它們包含大量深度數組和對象,所以比較它們非常棘手。 – 2014-12-03 06:54:32

相關問題