2014-08-27 35 views
0
自定義屬性

考慮下面的代碼:爲Zend的DB行

$select = $table->select()->setIntegrityCheck(false); 
$row = $table->fetchRow($select); 

// this throws Specified column "custom_data" is not in the row 
$row->custom_data = 123; 

echo $row->custom_data; 

我怎樣才能一些自定義的數據添加到Zend的分貝行?

回答

2

如果你想臨時數據添加到該行的對象,使得它實際上並沒有得到保存與行,不使用屬性,在你行類中使用的setter方法:

protected $customData = null; 

public function getCustomData() 
{ 
    return $this->customData; 
} 

public function setCustomData($data) 
{ 
    $this->customData = $data; 
    return $this; 
} 

然後,只需調用,從你的代碼:

$row->setCustomData($data); 

另外,如果您想爲很多類做到這一點,您可以覆蓋Zend_Db_Table_Row_Abstract這樣的__set()方法,而不是拋出一個異常,它存儲的值一個單獨的區域:

protected $extraFields = []; 

function __set($columnName, $value) 
{ 
    $columnName = $this->_transformColumn($columnName); 
    if (array_key_exists($columnName, $this->_data)) { 
     $this->_data[$columnName] = $value; 
     $this->_modifiedFields[$columnName] = true; 
    } else { 
     $this->extraFields[$columnName] = $value; 
    } 
} 

public function __get($columnName) 
{ 
    $columnName = $this->_transformColumn($columnName); 
    if (array_key_exists($columnName, $this->_data)) { 
     return $this->_data[$columnName]; 
    } else { 
     return $this->extraFields[$columnName]; 
    } 
}