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

  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?

  7. #7
    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
    ça, typiquement, c'est une parenthèse en trop ou en moins ou une virgule mal placée...
    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]

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 233
    Par défaut
    Mais ou ça dans mon code?

  9. #9
    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,

    Quand tu écris tu es en train d'écrire du PHP, c'est à dire que tu fais un cast PHP et donc entre les paranthèses tu dois spécifier un type PHP, varchar est un type de colonne MySQL.

    Tu devrais donc écrire pour que ça marche.

  10. #10
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 233
    Par défaut
    Merci patbator pour ton réponse ça fonctionne bien,mais il faut éliminer ça:,Zend_Db::STRING_TYPE

+ 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