Zend_Db_Table - 关联数组而不是对象

时间:2009-08-24 23:10:38

标签: php mysql zend-framework

以下一行:

$select = $table->select();
$select->where('approved = 1');
$result = $table->fetchRow($select);

返回一个对象。我想要的是获得一个关联数组。

我知道Zend_Db有fetchAssoc()方法,但在Zend_Db_Table中也是类似的(我试过fetchAssoc()但是它没有用,我在文档中没有找到任何东西)?

3 个答案:

答案 0 :(得分:18)

$result = $table->fetchRow($select)->toArray();

Zend_Db_Table_RowZend_Db_Table_Rowset都有toArray()方法。 Row作为关联数组返回,Rowset作为关联数组的简单(序数)数组返回。

答案 1 :(得分:2)

为了进一步说明Bill的答案,如果你想让Rowset作为一个关联数组(而不是序数)返回,唯一的选择似乎是Zend_Db(正如你所提到的):

$db     = $table->getAdapter();
$select = $table->select();
$select->where('approved = 1');
$result = $db->fetchAssoc($select);

答案 2 :(得分:1)

Zend_Loader::loadClass('Zend_Db_Table');
class SomeTable extends Zend_Db_Table_Abstract{

protected $_name = 'sometable';

public function getAssoc($where = null, $order = null, $count = null, $offset = null){
    if (!($where instanceof Zend_Db_Table_Select)) {
        $select = $this->select();

        if ($where !== null) {
            $this->_where($select, $where);
        }

        if ($order !== null) {
            $this->_order($select, $order);
        }

        if ($count !== null || $offset !== null) {
            $select->limit($count, $offset);
        }

    } else {
        $select = $where;
    }   
    return $this->getAdapter()->fetchAssoc($select);        
}
}

然后在你的代码中:

$this->some_table = new SomeTable();
//Get and print some row(s) 
$where = $this->some_table->getAdapter()->quoteInto('primarykey_name = ?', $primarykey_value);
print_r($this->somes_table->getAssoc($where));

//Get and print all rows 
print_r($this->areas_table->getAssoc());