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 :

Requete multi table


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
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut Requete multi table
    Hello a tous,
    je viens de passer sous ZF, je galère pas mal...

    De ce que j'ai pu lire, la connection est faite automatiquement (cad sans que l'on ai besoin d'écrire de code nul part dans le bootstrap ou le fichier index.php général) si l'on place les bonnes données dans le application.ini si tout est bien déclaré ou il faut bien sur.

    Pour moi, ca marche pour l'instant, j'arrive a afficher les contenus des tables assez facilement par ->fetchAll(). Seulement, voila t-il pas que j'ai une dépendance entre 2 tables et qu'au lieu d'afficher les ID de la table dépendante, j'aimerais quand même avoir les libellés...

    Donc, ce que j'ai fait pour commencer, c'est créer une fonction qui permet de récupérer tous les éléments de la table avec une jointure: ci-dessous la fonction de ma classe Ecoliers:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public function getTousLesEcoliers()
    	{
    		$select->from('ecoliers')
        		   ->join('ecoles','ecoliers.id_ecolier=ecole.id_ecolier');
            return $this->fetchAll($select)->toArray();
    	}
    Dans mon controller, un appel classique dans mon indexAction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $joueurs = new Joueurs();
    $this->view->ecoliers = $ecoliers->getTousLesEcoliers();
    Et donc, quand je teste, page blanche.....rien ne s'affiche...
    Je suppose que ma requête est pourrie.........

    Il m'arrive souvent que rien ne s'affiche lorsque je dois tester mon code...Donc si au passage quelqu'un pourrait me dire comment faire pour ne pas galérer pour debugger ZF, ce serait extrêmement gentil...

    Pour info, je taff avec WAMP, je code avec eclipse (workspace directement dans le dossier www: je sais, c'est moche )

    Voila, je vous remercie pour vos avis éclairé ! De mon coté, je prends tout bon conseil, parce que j'ai jamais autant galéré dans un projet PHP (LOL). Il faut dire aussi que c'est mon premier MVC, donc c'est un peu déroutant au début...
    ++

  2. #2
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Tu as deux méthodes pour récupérer les informations de deux tables ayant une liaison.

    En utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected $_referenceMap
    ou/et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected $_dependentTables
    Regarde la documentation pour en savoir plus, mais en gros cela te permettra d'utiliser des méthode directement sur tes objets qui permettront de récupérer d'autres informations sur les tables dépendantes.

    Sinon faire comme tu as voulu le faire en utilisant join, il y a d'ailleurs plusieurs type selon ce que tu veux récupérer.

    Par contre dans ton modèle tu devrais avoir quelque chose de ce style, je suis pas sur que ça soit parfaitement bon n'ayant testé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public function getTousLesEcoliers()
    	{
    		$select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
    	        			->setIntegrityCheck(false)
        		   			->join('ecoles','ecoliers.id_ecolier=ecole.id_ecolier');
            return $this->fetchAll($select)->toArray();
    	}

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Hello,
    dsl j'ai pas eu le temps de répondre hier...

    Alors j'ai fait différents tests et le mieux que j'ai pu avoir, c'est pas une page blanche (c'est déjà ça, LOL):
    An error occurred
    Application error

    Aucune idée de ce qui peut poser problème...

    Comme je commence carrément a en avoir marre, je vais vous montrer mon code tout simplement, je craque...lol

    Je commence par mon bootstrap:
    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
    42
    43
     
    <?php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
        protected function _initAutoload() {
        	require_once 'Zend/Loader/Autoloader.php';
    		$autoloader = Zend_Loader_Autoloader::getInstance();
    		$autoloader->setFallbackAutoloader(true);
    		return $autoloader;
        }
     
    	/**
         * Initialize session
         *
         * @return Zend_View
         */
        protected function _initView()
        {
            // Initialize view
            $view = new Zend_View();
            $view->doctype('XHTML1_STRICT');
            $view->headTitle('Mon site web!!!');
            $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
            $view->headLink()->prependStylesheet('/pwp/public/css/site.css');
     
            // Add it to the ViewRenderer
            $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
            $viewRenderer->setView($view);
     
            // Return it, so that it can be stored by the bootstrap
            return $view;
        }
     
    	/**
    	 * @return Zend_Navigation
    	 */
    	protected function _initNavigation()  {
            $view = $this->bootstrap('layout')->getResource('layout')->getView();
    		$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
    		$view->navigation(new Zend_Navigation($config));
    	}
    }
    Ecoliers.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
     
    <?php
     
    class Ecoliers extends Zend_Db_Table
    {
        protected $_name = 'Ecoliers';
     
    	protected $_primary = 'id_ecolier';
     
        protected $_referenceMap    = array(
        	'ecolier' => array( 							// rôle
                'columns'           => array('id_ecole'),	// clé secondaire
                'refTableClass'     => 'Ecoles', 			// Table dépendante
                'refColumns'        => 'id_ecole' 			// Clé primaire de la table dep
            ));
     
        public static $tab = 'Ecoliers';
     
        public function ajoutEcolier($n, $i) {
        	 $row = $this->createRow();
             $row->nom_ecolier = $n;
             $row->id_ecole = $i;
             $row->save();
        }
     
    	public function getTousLesEcoliers()
    	{
    		$select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
    	        			->setIntegrityCheck(false)
        		   			->join('ecoles','ecoliers.id_ecole=ecole.id_ecole');
            return $this->fetchAll($select)->toArray();
    	}  
    }
    Le controller:
    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
     
    <?php
     
    class EcoliersController extends Zend_Controller_Action 
    {
    	public function init()
    	{
    		/* Initialize action controller here */
    		$activeNav = $this->view->navigation()->findByController('index');
    		$activeNav->active = true;
    		$activeNav->setClass("active");
    	}
     
        function indexAction()
        {
        	$this->view->title = "Liste des Ecoliers";
        	$ecoliers = new Ecoliers();
        	//$this->view->ecoliers = $ecoliers ->fetchAll();
        	$this->view->ecoliers = $ecoliers ->getTousLesEcoliers();
        }
    }
    mon index.php (même si je pense pas que le soucis soit la...)
    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
     
    <?php
     
    // Define path to application directory
    defined('APPLICATION_PATH')
        || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
     
    // Define application environment
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
     
    set_include_path(implode(PATH_SEPARATOR, array(
        realpath(APPLICATION_PATH . '/../library'),
        realpath(APPLICATION_PATH . '/../application/models'),
        get_include_path(),
    )));
     
    /** Zend_Application */
    require_once 'Zend/Application.php';
     
    // Create application, bootstrap, and run
    $application = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );
     
    $application->bootstrap()
                ->run();
    Voila, j’espère que l'un d'entre vous pourra m'aider et m'expliquer ce qui ne va pas, je désespère...

    D'avance, merci !!
    ++

  4. #4
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Il faudrait le message d'erreur complet

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Je me doute, j'aimerais l'avoir aussi !!!
    Pourtant j'ai créé mon projet avec ZF et il m'avait créé un errorController automatiquement...Il n'a pas l'air d’être appelé lors de la rencontre de l'erreur...

  6. #6
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Essaye d'ajouter zfdebug

Discussions similaires

  1. Requete multi tables
    Par elmayor1983 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/04/2007, 15h39
  2. requete multi table
    Par robert_trudel dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 16/01/2007, 07h20
  3. Requete multi table avec LIMIT et ORDER BY
    Par yobogs dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/10/2006, 17h29
  4. probleme de requete multi table pour exclure des resultats
    Par voilabad dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/05/2006, 08h49
  5. requete multi table - multi champ
    Par Jean-Matt dans le forum Oracle
    Réponses: 6
    Dernier message: 14/10/2005, 17h18

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