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

MVC PHP Discussion :

jointure de table avec Zend Framework


Sujet :

MVC PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Par défaut jointure de table avec Zend Framework
    Bonjour,

    je débute dans le système MVC et également dans zend framework

    j'ai une petite application php avec une db, dans cette db j'ai deux tables
    une table appelé ami et l'autre commande

    j'ai déjà réussi à faire des requêtes qui affichait simplement les enregistrement de la table ami, et également à affiner avec des clauses where

    ce que je voudrai faire maintenant, c'est réaliser une jointure des deux tables pour afficher les amis qui ont des commandes dans la table commande. Mais là je suis perdu

    voici mon code :

    page IndexController.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	public function clientAction()
    	{
    		$this->view->title = "Liste des amis ayant des commandes en cours";
    		$amis = new Ami();
    		$commande = new Commande();
    		$select = $amis->select('nom')
    		->from('ami')
    		->join('commande','commande.idAmi = ami.id');
    		$this->view->clients = $amis->fetchAll($select);
     
     
     
    	}
    la page client.phtml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php foreach($this->clients as $client) :?>
    	<p><?php echo $client->nom;?></p>
    <?php endforeach;?>
    la page models/Ami.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
     
    class Ami extends Zend_Db_Table
    {
        protected $_name = 'ami';
        protected $_primary	= 'id';
    }
    ?>
    la page models/Commande.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
     
    class Commande extends Zend_Db_Table
    {
        protected $_name = 'commande';
        protected $_primary	= 'id';
    }
    ?>



    et pour finir la page index.php

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <?php
     
    error_reporting(E_ALL|E_STRICT);
    ini_set('display_errors', 1);
    date_default_timezone_set('Europe/Paris');
     
    // mise en place des répertoires et chargement des classes
    set_include_path('.'
        . PATH_SEPARATOR . './library'
        . PATH_SEPARATOR . './application/models/'
        . PATH_SEPARATOR . get_include_path());
     
     
    include "Zend/Loader.php";
     
     
    Zend_Loader::registerAutoload();
    //on définit un nouvel objet de configuration
    $oConfig = new Zend_Config_Ini('./application/config.ini', 'connexion');
    // Mise en place de la BDD
    $oDb = Zend_Db::factory($oConfig->db);
    // on définit notre objet de base de données par défaut
    Zend_Db_Table::setDefaultAdapter($oDb);
     
     
    // setup controller
    $frontController = Zend_Controller_Front::getInstance();
    $frontController->throwExceptions(true);
    $frontController->setControllerDirectory('./application/controllers');
     
    // on définit le chemin des layouts
    $aOptions = array(
        'layout'     => 'home',
        'layoutPath' => './application/layouts'
    );
    Zend_Layout::startMvc($aOptions);
     
    // run!
    $frontController->dispatch();
    ?>

    pour l'instant je teste en tapant simplement l'url monsite/index/client
    mais j'ai un message d'erreur

    Fatal error: Uncaught exception 'Zend_Db_Table_Select_Exception' with message 'Select query cannot join with another table' in C:....

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 77
    Par défaut
    Il faut mettre "->setIntegrityCheck(false)".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		$select = $amis->select('nom')->setIntegrityCheck(false)
    		->from('ami')
    		->join('commande','commande.idAmi = ami.id');

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Par défaut
    salut,

    un grand merci ca fonctionne, mais seulement j'ai remarqué que c'est toujours le champ 'nom' qui est récupérée même si j'indique un autre champ

    comment choisir plusieurs champ? faut-il utiliser un tableau?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 77
    Par défaut
    En fait, on ne ne met les noms de champs dans la méthode "select", mais dans la méthode "from".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		$select = $amis->select()->setIntegrityCheck(false)
    		->from('ami', array('nom', 'prenom', 'autre'))
    		->join('commande','commande.idAmi = ami.id');
    Par défaut, il récupère tous les champs de la table (si tu ne précises pas).

    Même fonctionnement dans les jointures. Le troisième paramètre peut service à spécifier les champs.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Par défaut
    ok, encore merci

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

Discussions similaires

  1. Creation d'une table avec zend framework
    Par italiano1360 dans le forum Zend_Db
    Réponses: 1
    Dernier message: 12/06/2012, 13h44
  2. Jointure de table avec Interbase
    Par ada_b dans le forum InterBase
    Réponses: 21
    Dernier message: 12/05/2010, 19h52
  3. Réponses: 5
    Dernier message: 21/12/2007, 23h33
  4. Insert avec zend framework
    Par rugby_roux dans le forum Zend
    Réponses: 1
    Dernier message: 30/01/2007, 17h22

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