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 de deux tables de base de données zend


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 49
    Par défaut jointure de deux tables de base de données zend
    je travaille avec framework zend version 1.10.2 php
    JE met ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      public function indexAction() {
            $offre = new Model_DbTable_Offre();
            //$offreAll = $offre->fetchAll()->toArray();
            //$this->view->offreAll = $offreAll;
             $select= $offre->select()->from(array('of' => offres'))->joinInner(array('ch' => 'cheque_cadeau'),"of.offres  = ch.cheque_cadeau");
               $row = $offre->fetchAll($select);
     
              $this->view->offre = $row;
     
        }


    mais ne fonctionne pas


    le probleme que je veux faire une jointure entre 2 tables de base de données


    table 1 offre: id_offre,date_modiff,date_offre
    table 2 cheque_cadeau: id_cheque_cadeau,id_offre,date_debut




    s'il vous plait repond à moi trés vite zend me deprimé

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    La doc parle de join et non joinInner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $select= $offre->select()
    ->from(array('of' => offres'))
    ->join(array('ch' => 'cheque_cadeau'),"of.offres = ch.cheque_cadeau");

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 49
    Par défaut relié 2 tables à la base de données
    bonjour ,
    je travaille sue zend version 1.10.2
    j'ai essayé de faire jointure entre 2tables mais ça ne marche pas
    j'ai fait dans controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     $db = Zend_Db::factory($params = array ('hostname' => 'localhost','username' => 'root','password' => '','dbname' => 'ecommerce');
            $db = Zend_Db::factory('PDO_MYSQL', $params));
            $select = new Zend_Db_Select($db);
            $select = $db->select()
                 ->from(array('o' => 'offre'),array('id_offre','date_offre'))
                ->join(array('ch' => 'cheque_cadeau'),'o.id_offred = ch.id_offred');
    et il m'affiché erreur dans la ligne 15
    j'ai met les deux premieres lignes entre commentaire
    et il m'affiché des erreurs de type comme ça

    Notice: Undefined variable: db in C:\wamp\www\TP1-Ecommerce\application\controllers\OffreController.php on line 17

    Catchable fatal error: Argument 1 passed to Zend_Db_Select::__construct() must be an instance of Zend_Db_Adapter_Abstract, null given, called in C:\wamp\www\TP1-Ecommerce\application\controllers\OffreController.php on line 17 and defined in C:\wamp\www\TP1-Ecommerce\library\Zend\Db\Select.php on line 163

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 49
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     public function indexAction() {
            $offre = new Model_DbTable_Offre();
     
    			$select->from('offre','id_offre')
                       ->join('cheque_cadeau','cheque_cadeau.id_offre=offre.id_offre','date_offre')
                $result = $db->fetchAll($select);
    			$this->view->result = $result;
     
        }
    j'ai essayé ce code mais toujours il m'affiche l'erreur concernant $db
    Avez vous une solution.
    Merci d'avance.

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Quand on instancie un objet, on fait attention d'utiliser le même nom pour y avoir accès .



  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingenieur BI - Dev Web Senior
    Inscrit en
    Décembre 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingenieur BI - Dev Web Senior

    Informations forums :
    Inscription : Décembre 2009
    Messages : 118
    Par défaut
    Bonjour joulive,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $db = Zend_Db::factory($params = array ('hostname' => 'localhost','username' => 'root','password' => '','dbname' => 'ecommerce');
    $db = Zend_Db::factory('PDO_MYSQL', $params));
    $select = new Zend_Db_Select($db);
    $select = $db->select()
    ->from(array('o' => 'offre'),array('id_offre','date_offre'))
    ->join(array('ch' => 'cheque_cadeau'),'o.id_offred = ch.id_offred');
    1- Tant que tu as un model "Model_DbTable_Offre" qui hérite de la class "Zend_Db_Table_Abstract" tu n'as pas besoin de créer une nouvelle instance de la classe "Zend_DB", elle est déjà présente dans ton model "Model_DbTable_Offre" comme attribut "$_db"!
    Donc il faut juste vérifier que les coordonnées d'accès a la base de données dans ton fichier application.ini sont correctes.

    2- Cela implique :
    • que tu dois enlever ces 2 lignes
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      $db = Zend_Db::factory($params = array ('hostname' => 'localhost','username' => 'root','password' => '','dbname' => 'ecommerce');
      $db = Zend_Db::factory('PDO_MYSQL', $params));
    • que tu créer une fonction "getOffres" dans ton model et tu bouge ce code ci-dessous dans ta nouvelle fonction
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      $select = new Zend_Db_Select($db);
      $select = $db->select()->from(array('o' => 'offre'),array('id_offre','date_offre'))->join(array('ch' => 'cheque_cadeau'),'o.id_offred = ch.id_offred');
      .
      Tu auras quelque chose comme ça:
      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
      <?php
      class Model_DbTable_Offre extends Zend_Db_Table_Abstract {
       
      	public function getOffres(){
                  // $_db est un attribut de la classe mère Zend_Db_Table_Abstract 
                  // on récupère une instance de la classe Zend_Db_Select
                  $select = $this->_db->select();
                  $select->from(array('o' => 'offre'), array('id_offre','date_offre'))
      			   ->joinInner(array('ch' => 'cheque_cadeau'), 'o.id_offre = ch.id_offre');
      	    // on exécute la requête
      	    $stmt = $this->_db->query($select);
                  // on récupère la liste des résultats sous format d'objet et non tableau associatif (par défaut)
      	    return $stmt->fetchAll(Zend_Db::FETCH_OBJ);
          }
      }
      ?>
    • Tu modifie la fonction "indexAction" dans ton controller pour avoir quelque chose comme ça:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      <?php
      class IndexController extends Zend_Controller_Action {
       
      	public function indexAction(){
                   $model = new Model_DbTable_Offre();
      	     $this->view->offres = $model->getOffres();
      	}
      }
      ?>


    Et voila!

    Merci.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/04/2012, 14h05
  2. pbls de jointure sur deux tables d'une base de donnée
    Par ciolvic dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/06/2010, 09h32
  3. jointure de deux tables de base de données
    Par joulive dans le forum Zend_Db
    Réponses: 0
    Dernier message: 31/03/2010, 11h23
  4. [MySQL] Faire une jointure entre deux tables qui ne sont pas dans la même base de données
    Par sandddy dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/04/2008, 14h18
  5. jointure de deux tables de deux bases de données!
    Par JauB dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/01/2006, 11h05

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