Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/10/2007, 22h35   #1
Membre confirmé
 
Inscription : septembre 2004
Messages : 519
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 519
Points : 257
Points : 257
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 :
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 :
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
bibile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 10h02   #2
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 41
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : janvier 2007
Messages : 41
Points : 35
Points : 35
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 :
$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
coolcoco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 20h59   #3
Membre confirmé
 
Inscription : septembre 2004
Messages : 519
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 519
Points : 257
Points : 257
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!
bibile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 07h08   #4
Expert Confirmé Sénior
 
Avatar de Baptiste Wicht
 
Homme Baptiste Wicht
Étudiant
Inscription : octobre 2005
Messages : 7 465
Détails du profil
Informations personnelles :
Nom : Homme Baptiste Wicht
Âge : 24
Localisation : Suisse

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

Informations forums :
Inscription : octobre 2005
Messages : 7 465
Points : 16 862
Points : 16 862
Envoyer un message via MSN à Baptiste Wicht
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.
Baptiste Wicht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 08h24   #5
Membre confirmé
 
Inscription : septembre 2004
Messages : 519
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 519
Points : 257
Points : 257
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 ?
bibile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 12h43   #6
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
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 :
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...

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 !
ovh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 15h23   #7
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
On n'est pas les seuls à être frustrés par cette limitation du ZF

Voici un exemple de ce qu'il faudrait : avec un peu de chance ce sera intégré un jour, julien tu peux confirmer ?
http://framework.zend.com/wiki/displ...ommentId=38453
__________________
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

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 !
ovh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 10h54   #8
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 13
Points : 16
Points : 16
Citation:
Envoyé par ovh Voir le message
Voici un exemple de ce qu'il faudrait : avec un peu de chance ce sera intégré un jour, julien tu peux confirmer ?
http://framework.zend.com/wiki/displ...ommentId=38453
Je ne suis pa Julien mais cette fonctionnalité est présente dans l'incubateur.

@+
__2mx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 13h00   #9
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
Citation:
Envoyé par __2mx Voir le message
Je ne suis pa Julien mais cette fonctionnalité est présente dans l'incubateur.
Aaaah alors ça arrive bientôt en prod ?
__________________
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

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 !
ovh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h09.


 
 
 
 
Partenaires

Hébergement Web