Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Hello
J'explique :
J'aimerais changer les index d'un fetchRow fait sur un Zend_Db_Table_Abstract.
Par défaut, il me retourne un tableau avec index numériques partant de 0. Je vous copie colle un var_dump d'un Row_Set :
object(Roles_Set)#19 (10) { ["_data:protected"] => array(2) { [0] => array(3) { ["id_role"] => int(2) ["name"] => string(20) "system administrator" ["id_module"] => int(2) } [1] => array(3) { ["id_role"] => int(1) ["name"] => string(7) "visitor" ["id_module"] => int(1) } } ...
J'aimerais trouver à la place de 0 et de 1 la clé primaire en index, cad 2 et 1 dans cet exemple.
Alors j'ai bien cherché dans la doc, mais rien n'est proposé au niveau du fetchAll sur un model. Il n'est apparemment possible de modifier le fetchMode que sur une query faite directement depuis l'objet DB. Exemple :
$db->setFetchMode(Zend_Db::FETCH_OBJ); $result = $db->fetchAll('SELECT * FROM bugs WHERE bug_id = ?', 2);
... ce qui m'intéresse pas du tout puisqu'on perd toute la logique des modèles et que ca oblige à travailler avec des vulgaire tableaux ou objets sdt...
Bref, j'avais l'habitude avant ZF de bosser bcps avec des clés primaires en index de tableau d'objets, je ne retrouve pas cette fonctionnalité, et j'aimerais éviter de refaire moi même des tris à chaque fetchAll...
Des suggestions ?
Hors ligne
Ben ça ne résout pas tout.
J'aimerais faire un $roles[16] par exemple en étant sur que ça pointe bien vers le row id_role = 16. Trier sur la primary ne me certifie pas ça, si j'ai des trous, c'est mort.
Donc en attendant de trouver qque chose de mieux, j'ai rajouté une méthode qui fait le tri à ma place :
/** * Fetch rows and sort by a $columnName * @param string $columnName * @param string $sql * @return array */ public function fetchAndSort($columnName = null, $sql = null) { if(is_null($columnName)) $columnName = current(array_slice($this->_primary, 0, 1)); $rolesByFC = array(); foreach($this->fetchAll($sql) as $row) { $rolesByFC[$row->$columnName] = $row; } return $rolesByFC; }
Ca marche mais bon, ça ne me satisfait pas à 100%...
Hors ligne