2009-08-24 9 views
10

La ligne suivante:Zend_Db_Table - tableau associatif plutôt l'objet

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

Renvoie un objet. Ce que je voudrais, c'est obtenir un tableau associatif à la place.

Je sais que Zend_Db a la méthode fetchAssoc() pour cela mais est quelque chose de similaire aussi dans le Zend_Db_Table (j'ai essayé fetchAssoc() mais ça ne marche pas, je n'ai rien trouvé dans la documentation)?

Répondre

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

Les deux Zend_Db_Table_Row et Zend_Db_Table_Rowset ont une méthode toArray(). Une ligne est renvoyée en tant que tableau associatif et un ensemble de lignes est renvoyé sous la forme d'un tableau simple (ordinal) de tableaux associatifs.

2

Pour d'autres la réponse de Bill, si vous voulez que le retourné fonctionne comme un tableau associatif (plutôt que ordinale) le seul choix semble être Zend_Db (comme vous l'avez mentionné):

$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);   
} 
} 

Puis, en votre code:

$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()); 
Questions connexes