2012-06-07 2 views
0

Как преобразовать Zend_Db_Rable_Row в объект. Предположим, что таблица базы данных имеет одинаковые имена столбцов в качестве переменных в объекте, за исключением «» (частные переменные в объекте, начиная с «» (подчеркивание))Как преобразовать Zend_Db_Rable_Row в объект

, например столбец таблицы базы данных имя пользователя и имя переменной в объект _username

ответ

1

Если ваши личные переменные начинаются с символа подчеркивания, у вас скорее всего есть геттеры и сеттеры для них. Например. private $_myVar будет иметь сеттер setMyVar(). Этот код будет вызывать правильный сеттер для каждого из полей в строке:

public function convertToObject($row) 
{ 
    $myObject = new MyObject(); 

    foreach ($row->toArray() as $key=>$value) { 
     // find out the name of the setter to call 
     $setterName = 'set' . ucfirst($key); 
     $myObject->$setterName($value); 
    } 

    return $myObject; 
} 
1

Zend_Db_Table_Row является объектом. если вы вызываете fetchAll(), он вернет массив объектов типа Zend_Db_Table_Row (имена столбцов - это защищенные переменные, доступ к столбцу $ row->). Если вы вызываете fetchRow(), он вернет один объект Zend_Db_Table_Row.

, например:

//assume we are working inside a Application_Model_DbTable_ 
public function fetch() { 
$select = $this->select(); 
//here $result would return an array of Row objects that can be iterated over using a foreach 
$result = $this->fetchAll($select); 
//here we would return a single Row Object 
$select->where('id = ?', $id); 
$result = $this->fetchRow($select); 
//you can call toArray() on these objects if you need an array 
$array = $result->toArray(); 

} 
//if you are using these objects in your application you can always access any of the 
//columns using normal object syntax, without the underscores. 
$id = $result->id; 
$name = $result->name; 

Вы можете иметь некоторые различное поведение, если вы используете Zend_Db_Adapter или Zend_Db_Statement делать запросы.

Надеюсь, я правильно понял ваш вопрос.