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_Db PHP Discussion :

Pour exécuter une requete [ZF 1.7]


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut Pour exécuter une requete
    Bonjour,

    Ma question va paraitre un peu bizarre, mais je débute en zend.

    J'ai une table comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE `commentaire` (
    	`id` INT NOT NULL AUTO_INCREMENT ,
    	`nom` VARCHAR( 255 ) NOT NULL ,
    	`email` VARCHAR( 255 ) NOT NULL ,
    	`contenu` VARCHAR( 255 ) NOT NULL ,
    	`idArticle` INT NOT NULL, 	
    	PRIMARY KEY ( `id` ),
    	KEY `com_art_fk_constraint` (`idArticle`),
    	CONSTRAINT `com_art_fk_constraint` FOREIGN KEY (`idArticle`)
    	REFERENCES `articles` (`id`)
    ) 	ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8_unicode;
    Je souhaite récupérer tous les commentaires pour un article dont je connais son id, je procède donc ainsi :

    IndexController
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    	function voirarticleAction(){
    		$this->view->title="voir article";
    		$art = new Article();
    		$this->index = $this->_getParam('id',1);
    		$this->view->articles = $art->getArticle($this->index);	
    		$com = new Commentaire();
    		$this->view->commentaires = $com->getCommentaireArticles($this->index);
    	}
    et la requete me permettant de récuperer les commentaire pour un articles:
    Commentaire.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Commentaire extends Zend_Db_Table_Abstract {  
      public function getCommentaireArticles($id){
    	  $select = $this->select();
             $select->where('idArticle = ? ',$id);
             return $this->fetchAll($select);
      }
    Mais en lisant ce tuto :
    http://www.reseaucerta.org/cotecours...html#id2534727

    Je me demandais si c'était possible de le faire plus rapidement avec une méthode findRow,.. une classe Zend_Db_Table_Row_Abstract ou autre (j'avoue ne pas tout maitriser tout ma question) pour récupérer le meme résultat de ma requete.

    En espérant avoir été clair.

    Merci pour votre retour
    cdt

  2. #2
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Oui il y a un moyen plus simple d'y arriver, déjà dans ta class Commentaire il faut rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    protected $_name = 'commentaire';
    protected $_primary = array('id');
    Et d'ailleurs il faut le faire pour toutes tes classes qui héritent de Zend_Db_Table_Abstract, mettre le nom de la table en base et le nom des clés primaires comme j'ai écrit.
    Ensuite tu peux faire directement dans ton contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $com = new Commentaire();
    $this->view->commentaires = $com->fetchAll('idArticle = '.$this->index);
    Ou alors si tu veux garder ta fonction getCommentaireArticles, tu peux la faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function getCommentaireArticles($id){
             return $this->fetchAll('idArticle = '.$id);
      }
    En fait la méthode fetchAll prend en paramètre un where (celui que j'ai utilisé) donc quand il faut juste filtrer avec where, pas besoin de créer un select, on peut le faire directement comme ça.
    A noter que la méthode fetchAll prend en second paramètre un order, donc si par exemple tu veux trier tes commentaire du plus récent au plus ancien tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fetchAll('idArticle = '.$id, 'date_commentaire DESC');
    (DESC = du plus grand au plus petit) mais je vois que tu n'as pas mis de date dans ta table commentaire.

    Voilà, j'éspère que j'ai été suffisamment clair.

  3. #3
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut
    Bonjour Alshten,

    Oui c'est très clair comme réponse, et cela va mettre très utile! Je pense que je vais réécrire mon code comme tu me le conseilles. Merci pour ta réponse détaillée.

    Peut être pour finir, l'utilisation de la classe Zend_Db_Table_Row_Abstract n'a pas lieu d'être dans mon cas?

  4. #4
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Je pense pas. Personnellement j'ai jamais utilisé cette classe donc je peux pas vraiment te dire mais pour des cas simples, je pense pas.

    Sinon si tu veux bien manier la base de données, je te conseille de te renseigner sur toutes les méthodes du type fetchAll, fetchRow, fetchCol, fetchOne, fetchPairs, find, etc.. quand c'est bien utilisé ça peut faire un code très clair.
    Tu trouveras de l'aide ici :
    http://framework.zend.com/manual/fr/zend.db.html

  5. #5
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut
    Merci beaucoup! Je passe en résolu

    J'ai une autre question lié mais qui concerne les formulaires, je post dans la bonne question


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

Discussions similaires

  1. [AC-2007] Exécuter une requete uniquement pour l'élément en cours
    Par eliottgiraudo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/08/2013, 16h06
  2. Problème pour exécuter une chaîne de caractères
    Par Pongo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h34
  3. En difficulté pour faire une requete
    Par Fonzy17 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/03/2005, 10h56
  4. Exécuter une requete enregistrée dans un champ
    Par pascalT dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/03/2005, 10h46
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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