2014-08-27 4 views
0

Рассмотрим код ниже:настраиваемое свойство для Zend DB Row

$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

Если вы хотите добавить временные данные в объект строки таким образом, что он фактически не спасется со строкой, не использовать атрибуты, используйте метод установки в классе строки:

protected $customData = null; 

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

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

Тогда просто позвонить, что из вашего кода:

$row->setCustomData($data); 

с другой стороны, если вы хотите сделать это для многих классов, вы можете переопределить метод __set() из Zend_Db_Table_Row_Abstract таким образом, что вместо того, чтобы выбросить исключение, он сохраняет значение в отдельная площадь:

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]; 
    } 
} 
Смежные вопросы