如何将Zend_Db_Rable_Row转换为对象

时间:2012-06-07 06:39:48

标签: php zend-framework zend-db zend-db-table

如何将Zend_Db_Rable_Row转换为对象。假设数据库表与对象中的变量具有相同的列名,除了''(对象中的私有变量以''(下划线)开头)

例如,数据库表列是用户名,对象中的变量名是_username

2 个答案:

答案 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进行查询,则可能会有一些不同的行为。

我希望我能正确理解你的问题。