Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-08-2008 11:57:41

cr0cK
Membre
Date d'inscription: 10-07-2008
Messages: 14

setFetchMode sur $model->fetchRow()

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 :

Code:

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 :

Code:

$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

 

#2 27-08-2008 13:03:10

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: setFetchMode sur $model->fetchRow()

Pourquoi ne pas faire le tri au niveau de la requete ???

Hors ligne

 

#3 27-08-2008 13:18:42

cr0cK
Membre
Date d'inscription: 10-07-2008
Messages: 14

Re: setFetchMode sur $model->fetchRow()

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 :

Code:

/**
 * 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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages