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 :

Souci avec join()


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Par défaut Souci avec join()
    Bonjour,

    J'ai testé la requête SQL suivante dans phpMyAdmin pour vérifier que celle-ci était correcte et me retournait bien des résultats :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * FROM constante c
    JOIN constante_c cc ON cc.constante = c.id
    JOIN langue l ON cc.langue = l.id
    JOIN statut sl ON l.statut = sl.id
    JOIN statut sc ON c.statut = sc.id
    Et c'est OK ...

    J'essaye d'écrire cette requête en 'langage Zend DB' en écrivant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function mySelect() {
    		$select = $this->select(array('c' => $this));
    		$select->setIntegrityCheck(false);
     
    		$select->join(array('cc' => 'constante_c'), 'cc.constante = c.id');
    		$select->join(array('l' => 'langue'), 'cc.langue = l.id');
    		$select->join(array('sl' => 'statut'), 'sl.statut = l.id');
    		$select->join(array('sc' => 'statut'), 'sc.statut = c.id');
     
    		return $select;
    	}
    Pour la bonne compréhension du code, il faut savoir que je suis dans la classe "Constante" qui décrit ma table "constante" et qui étend donc Zend_Db_Table_Abstract.

    C'est donc la raison pour laquelle je lance premièrement un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $select->setIntegrityCheck(false);
    Le problème quand je test cette fonction en faisant ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $const = new Constante();
    $result = $const->fetchAll($const->mySelect())->toArray();
     
    print_r($result);
    ... j'obtiens une erreur Zend, qui est la suivante :

    Code : 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
    18
    19
     
    An error occurred
    Application error
    Exception information:
     
    Message: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'c.id' in 'on clause'
    Stack trace:
     
    #0 /home/mydevcc/sd/testing/www/library/Zend/Db/Statement.php(283): Zend_Db_Statement_Pdo->_execute(Array)
    #1 /home/mydevcc/sd/testing/www/library/Zend/Db/Adapter/Abstract.php(430): Zend_Db_Statement->execute(Array)
    #2 /home/mydevcc/sd/testing/www/library/Zend/Db/Adapter/Pdo/Abstract.php(220): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Table_Select), Array)
    #3 /home/mydevcc/sd/testing/www/library/Zend/Db/Table/Abstract.php(1191): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Table_Select))
    #4 /home/mydevcc/sd/testing/www/library/Zend/Db/Table/Abstract.php(1046): Zend_Db_Table_Abstract->_fetch(Object(Zend_Db_Table_Select))
    #5 /home/mydevcc/sd/testing/www/application/controllers/IndexController.php(10): Zend_Db_Table_Abstract->fetchAll(Object(Zend_Db_Table_Select))
    #6 /home/mydevcc/sd/testing/www/library/Zend/Controller/Action.php(494): IndexController->indexAction()
    #7 /home/mydevcc/sd/testing/www/library/Zend/Controller/Dispatcher/Standard.php(285): Zend_Controller_Action->dispatch('indexAction')
    #8 /home/mydevcc/sd/testing/www/library/Zend/Controller/Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
    #9 /home/mydevcc/sd/testing/www/public/index.php(36): Zend_Controller_Front->dispatch()
    #10 {main}
    Quelqu'un peut m'aider ?

    Merci,
    Olivier

  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
    Pour la première ligne j'aurais plutôt écrit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select = $this->select()->from(array('c' => $this->_name));
    Sinon pour afficher la requête que Zend exécute tu peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $select->__toString();
    Très pratique pour débugger.

  3. #3
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par Alshten Voir le message
    Pour la première ligne j'aurais plutôt écrit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select = $this->select()->from(array('c' => $this->_name));
    +1 : la méthode select d'un Zend_Db_Table ne prend pas d'argument

    Citation Envoyé par Alshten Voir le message
    Sinon pour afficher la requête que Zend exécute tu peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $select->__toString();
    Très pratique pour débugger.
    Tu peux même te contenter de echo $select; (la méthode __toString() étant une méthode "magique" )

Discussions similaires

  1. Petit souci avec les jointures (join on / join using)
    Par Ben-o dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/02/2013, 18h25
  2. [MySQL] select 4 table avec Join et where un soucis
    Par Mortillus dans le forum PHP & Base de données
    Réponses: 32
    Dernier message: 03/03/2010, 11h14
  3. soucis avec des requetes "INNER JOIN" Imbriquées
    Par Moutonstar dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/11/2008, 12h12
  4. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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