如何将Zend_Db_Rable_Row转换为对象。假设数据库表与对象中的变量具有相同的列名,除了''(对象中的私有变量以''(下划线)开头)
例如,数据库表列是用户名,对象中的变量名是_username
答案 0 :(得分:1)
如果您的私有变量以下划线开头,那么您很可能会拥有这些变量的getter和setter。例如。 private $_myVar
将设置setMyVar()
。此代码将为行中的每个字段调用正确的setter:
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 :(得分: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进行查询,则可能会有一些不同的行为。
我希望我能正确理解你的问题。