2009-08-24 3 views
10

Следующая строка:Zend_Db_Table - Ассоциативный массив вместо объекта

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

Возвращает объект. Я хотел бы получить вместо этого ассоциативный массив.

Я знаю, что Zend_Db имеет метод fetchAssoc() для этого, но что-то подобное также в Zend_Db_Table (я попробовал fetchAssoc(), но он не работает, я ничего не нашел в документации)?

ответ

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

Оба Zend_Db_Table_Row и Zend_Db_Table_Rowset есть метод toArray(). Строка возвращается как ассоциативный массив, а Rowset возвращается как простой (порядковый) массив ассоциативных массивов.

2

Для дальнейшего ответа Билла, если вы хотели Rowset вернулся как ассоциативный массив (вместо порядкового) единственный выбор, как представляется, Zend_Db (как упоминалось):

$db  = $table->getAdapter(); 
$select = $table->select(); 
$select->where('approved = 1'); 
$result = $db->fetchAssoc($select); 
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()); 
Смежные вопросы