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 :

Jointure entre 2 tables en utilisant zend


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 233
    Par défaut Jointure entre 2 tables en utilisant zend
    Bonjour,

    Je veux afficher le contenu de 2 tables en utilisant zend dans la vue index.phtml ,voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $table = new Vente();
    	$select =$table->select()->from(array('vente'),array
     
    ('id_cli','id_vente','date_vente','categorie_v'))
    ->join(array('client'),array('id_cli','nom_cl','prenom_cl'))
    	->where('vente.id_cli=client.id_cli','vente.categorie_v = ?','monture');
    	$users = $table->fetchAll($select);
    	$this->view->ventes= $users;
    Et voila ce qui me donne dans l'exécution:
    Fatal error: Uncaught exception 'Zend_Db_Table_Select_Exception' with message 'Select query cannot join with another table' in C:\wamp\www\Opticien\library\Zend\Db\Table\Select.php:215
    Stack trace:
    #0 C:\wamp\www\Opticien\library\Zend\Db\Adapter\Abstract.php(456): Zend_Db_Table_Select->assemble()
    #1 C:\wamp\www\Opticien\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Table_Select), Array)
    #2 C:\wamp\www\Opticien\library\Zend\Db\Table\Abstract.php(1505): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Table_Select))
    #3 C:\wamp\www\Opticien\library\Zend\Db\Table\Abstract.php(1321): Zend_Db_Table_Abstract->_fetch(Object(Zend_Db_Table_Select))
    #4 C:\wamp\www\Opticien\application\default\controllers\VenteController.php(29): Zend_Db_Table_Abstract->fetchAll(Object(Zend_Db_Table_Select))
    #5 C:\wamp\www\Opticien\library\Zend\Controller\Action.php(513): VenteController->indexAction()
    #6 C:\wamp\www\Opticien\library\Zend\Controller\Dispatcher\Standard.php(289): Zend_Controller_Action in C:\wamp\www\Opticien\library\Zend\Db\Table\Select.php on line 215
    Ou est donc le problème?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Si tu veux utiliser une jointure, il faut préciser dans join() la condition de jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $select = $table->select()
      ->from(array('vente'), array('id_cli','id_vente','date_vente','categorie_v'))
      ->join(array('client'), 'vente.id_cli=client.id_cli', array('nom_cl','prenom_cl'))
      ->where(array('categorie_v = ?' => 'monture'));
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    Hello,

    Les selects issus d'une Db_Table en particulier sont limités à cette table par défaut.
    Il suffit pour dépasser cet état de fait de faire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $table->select()->setIntegrityCheck(false)
    ->from(array('vente'), array('id_cli','id_vente','date_vente','categorie_v'))
    à partir de là tu peux faire des jointures.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 233
    Par défaut
    J'ai appliqué le code que vous m'avez donné,voila ce qui m'a donné :

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'where clause'' in C:\wamp\www\Opticien\library\Zend\Db\Statement\Pdo.php:228 Stack trace:
    #0 C:\wamp\www\Opticien\library\Zend\Db\Statement\Pdo.php(228): PDOStatement->execute(Array)
    #1 C:\wamp\www\Opticien\library\Zend\Db\Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
    #2 C:\wamp\www\Opticien\library\Zend\Db\Adapter\Abstract.php(468): Zend_Db_Statement->execute(Array)
    #3 C:\wamp\www\Opticien\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Table_Select), Array)
    #4 C:\wamp\www\Opticien\library\Zend\Db\Table\Abstract.php(1505): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Table_Select))
    #5 C:\wamp\www\Opticien\library\Zend\Db\Table\Abstract.php(1321): Zend_Db_Table_Abstract->_fetch(Object(Zend_Db_Table_Select))
    #6 C:\wamp\www\Opticien\application\default\controllers\VenteController.php(31): Zend_Db_Table_Abstract->fetchAll(Object(Zend_D in C:\wamp\www\Opticien\library\Zend\Db\Statement\Pdo.php on line 234
    Ou est donc le problème?
    Merci pour vos réponses

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    Hello,

    En regardant ton ->where() je le trouve bizarre.
    Perso mes where sont comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select->where('champ = ?', $valeur)
    Si ton champ est un entier en plus je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select->where('champ = ?', (int)$valeur, Zend_Db::INT_TYPE);
    Comme ça je m'assure que la valeur est castée en int et avec le 3ème param, zend sait qu'il n'a pas à l'échapper.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 233
    Par défaut
    patbator,
    Mon champ est de type varchar j'ai appliqué votre code et voici ce que j'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $valeur='monture';
    	$select = $table->select()->setIntegrityCheck(false)
      ->from(array('client'), array('id_cli','nom_cl','prenom_cl'))
      ->join(array('vente'), 'vente.id_cli=client.id_cli',array
     
    ('id_vente','date_vente','categorie_v'))
      ->where('categorie_v = ?',(varchar)$valeur,Zend_Db::VARCHAR_TYPE));
    après exécution voila ce qui m'a donné:
    Parse error: parse error in C:\wamp\www\Opticien\application\default\controllers\VenteController.php on line 30
    Ou est donc le problème?

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 20/05/2015, 13h36
  2. Jointure entre 3 tables
    Par zigune dans le forum Langage SQL
    Réponses: 9
    Dernier message: 15/11/2004, 16h04
  3. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50
  4. [jointure]requete possible de double jointure entre 2 tables
    Par akira_le_gaucher dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2004, 15h03
  5. Jointure entre 2 tables et OR
    Par PyRoFlo dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/02/2004, 18h42

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