IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Récupérer un RowSet au lieu d'un tableau


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Par défaut Récupérer un RowSet au lieu d'un tableau
    Bonjour,
    La fonction classeLesPhotos de la classe suivant me rend un RowSet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Photos extends Zend_Db_Table
    {
        protected $_name = 'photos';
        protected $_primary = 'id';
     
        public function classeLesPhotos($r){
            $count  = 50;
            $offset = 0;
            return $this->fetchAll('1=1', "(r-$r)", $count, $offset);
        }
    }
    Celle de cette classe me rend un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Photos extends Zend_Db_Table
    {
        protected $_name = 'photos';
        protected $_primary = 'id';
     
        public function classeLesPhotos($r){
          $select = $this->getAdapter()->select()
            ->from('photos', array('url', 'r'))
            ->order("(r-$r)");
     
          return $select->query()->fetchAll();
        }
    }
    Est-ce que quelqu'un sait comment avoir un RowSet dans le 2ieme cas ?
    merci

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Par défaut
    Hello!

    Je pense que tu fais ça question de performance (pour ne pas récupérer toutes les colonnes de ta table photos), c'est juste?

    Dans tous les cas, ça rejoint une question que j'ai eu posé à la mailing list officielle:
    http://www.nabble.com/The-models-and...292s16154.html

    Apparemment, ce n'est pas trop possible... Si tu préfaire avoir un objet à la place d'un tableau, tu peux changer le mode du fetch:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->setFetchMode(Zend_Db::FETCH_OBJ);
    Mais ne sera pas un RowSet, mais quand même un objet

    Je ne sais pas si ma réflexion est juste, mais un modèle c'est surtout fait pour développer rapidement et avoir un objet complet (donc c'est normal qu'il cherche toute les données dans la table avant de construire l'objet non?).

    Ce qui engage une autre question que j'ai posé ce matin à la mailing list officielle: pour savoir où placer les requètes sql qui n'appartienne pas à un modèle...
    http://www.nabble.com/Best-practices...450s16154.html

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Par défaut
    merci pour ta réponse !

    au final, est-ce que tu as compris quelle était la bonne facon de faire les requetes sur la base ?
    pour l'instant, j'ai des fetchAll() sur des objets étendant Zend_Db_Table, ou alors des select() avec le code SQL a l'interieur (dans les actions des controleurs ou dans la description des classes de mes Zend_Db_Table).
    c'est sympa de pouvoir faire a peu près la même chose de différentes façons, mais j'aimerai bien connaitre la bonne

    si tu as réussi a trouver une réponse, je suis preneur!

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par bibile Voir le message
    merci pour ta réponse !

    au final, est-ce que tu as compris quelle était la bonne facon de faire les requetes sur la base ?
    pour l'instant, j'ai des fetchAll() sur des objets étendant Zend_Db_Table, ou alors des select() avec le code SQL a l'interieur (dans les actions des controleurs ou dans la description des classes de mes Zend_Db_Table).
    c'est sympa de pouvoir faire a peu près la même chose de différentes façons, mais j'aimerai bien connaitre la bonne

    si tu as réussi a trouver une réponse, je suis preneur!
    Je pense que ça dépend de la préférence de chacun. En ce qui me concerne, je me dis que si c'est déja fait, autant l'utiliser ainsi (je parle du fetchAll qui te renvoie un RowSet).

    Après, c'est vrai que dans un souci de performance, tu peux éventuellement optimiser tes requêtes, mais ce n'est à faire que si c'est indispensable. Il ne sert à rien d'optimiser à tort et à travers si ce n'est pas utile.

    Donc, personnellement, je dirais que tu peux toujours utiliser la méthode du fetchAll(), mais je n'ai pas une grand expérience du Zend Framework.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    519
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 519
    Par défaut
    j'ai un exemple ou je ne peux pas utiliser fetchAll.
    Dans le cas de jointures, je ne vois pas ou les mettre dans une requête fetchAll.

    Si j'utilisais des clef etrangeres, je pourrais sans doute m'en passer (des jointures) mais dans mon cas, je n'ai pas le choix.
    qqu'un sait comment faire des jointures dans un fetchAll qui rend un joli RowSets bien agreable a utiliser ?

  6. #6
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 842
    Par défaut
    Citation Envoyé par bibile Voir le message
    j'ai un exemple ou je ne peux pas utiliser fetchAll.
    Dans le cas de jointures, je ne vois pas ou les mettre dans une requête fetchAll.

    Si j'utilisais des clef etrangeres, je pourrais sans doute m'en passer (des jointures) mais dans mon cas, je n'ai pas le choix.
    qqu'un sait comment faire des jointures dans un fetchAll qui rend un joli RowSets bien agreable a utiliser ?
    Je me pose la même question car je suis dans le même cas (qui n'est quand même pas rare dès lors qu'on a une DB un tant soit peu conséquente et complexe) et la seule solution que j'ai trouvé est du bricolage mais ça marche :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public function liste() {
    		$db = $this->getAdapter();
    		// ici : on génère la requête SQL dans $query
    		$sql = $db->quoteInto($query, null);
    		$result = $db->query($sql)->fetchAll();
     
    		// crée une classe avec tous les résultats (rowset)
    		$data  = array(
             'table'    => $this,
             'data'     => $result,
             'rowClass' => $this->_rowClass,
             'stored'   => true
          );
     
          Zend_Loader::loadClass($this->_rowsetClass);
          return new $this->_rowsetClass($data);
    	}
    Issu de http://www.developpez.net/forums/sho...97&postcount=6

    Je cherche une méthode plus propre, mais je ne trouve pas

    Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

    Pensez à consulter les FAQs et les cours et tutoriels.
    FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
    Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.

    Je n'ai rien à voir avec la société www.ovh.com !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. récupérer le numéro de ligne d'un tableau
    Par seve998 dans le forum Struts 1
    Réponses: 1
    Dernier message: 26/02/2007, 17h52
  2. [Placement] Utiliser le CSS au lieu d'un tableau
    Par Marco85 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 19/12/2006, 16h09
  3. Réponses: 3
    Dernier message: 10/11/2006, 16h59
  4. Réponses: 6
    Dernier message: 17/10/2006, 12h21
  5. [javascript/dom] Récupérer le nombre de lignes d'un tableau
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/02/2006, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo