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 :

heritage multiple tables [ZF 1.7]


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut heritage multiple tables
    Bonjour, je suis un peu perdu dans mon apprentissage de Zend_Db...

    J'ai trois tables constituées ainsi (je met que les colonnes utilent au probleme)

    table categories (id, id_parent)
    table categories_lang (id, id_categorie, id_langue, nom)
    table langues (id, nom)

    la table categorie_lang a comme relation la table categories et langues

    J'ai fait une classe par table comme ci-dessous :

    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
     
    class TCategoryLang extends Zend_Db_Table_Abstract
    {
    	protected $_name = 'categories_lang';
     
    	protected $_primary = 'id';
     
    	// Pour l'affichage en tableau
    	protected $_entetes = array('id','id_categorie','nom','alias_url');
     
     
        protected $_referenceMap = array(
            'Langue' => array(
            'columns'           => 'id_langue',
            'refTableClass'     => 'TLangue',
            ),
            'Categorie' => array(
            'columns'           => 'id_categorie',
            'refTableClass'     => 'TCategory',
            ));
    }
     
    class TCategory extends Zend_Db_Table_Abstract
    {
    	protected $_name = 'categories';
     
    	protected $_primary = 'id';
    }
     
    class TLangue extends Zend_Db_Table_Abstract
    {
    	protected $_name = 'langues';
     
    	protected $_primary = 'id';
     
    }
    Je cherche à recupérer pour une categorie la liste des categories qui lui sont atachées dans chaque langue et afficher le resultat comme ceci :

    Catégorie 5 :
    Nom de la langue : Nom de la categorie

    Alors j'arrive à récupérer les catégorie dans chaque langue mais pas le nom de la langue associée. J'ai fait ceci pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $this->_categoryTable = new TCategory();
    $result = $this->_categoryTable->find(5)->current();
    $categLangs = $result->findTCategoryLang();
    J'aimerais que $categLang contienne le nom de la langue.....mais je sais pas comment faire...

  2. #2
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Déjà attention, quand tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $this->_categoryTable->find(5)->current();
    $result contient un rowset c'est à dire un objet Zend contenant une ligne de ta table.
    Ensuite quand tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $categLangs = $result->findTCategoryLang();
    Tu tente d'utiliser une méthode de ton rowset mais ce n'est pas la bonne façon de faire car il faudrait plutôt faire ta méthode dans la classe de ta table à utiliser comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $this->_categoryTable = new TCategory();
    $categLangs = $this->_categoryTable->findTCategoryLang(5);
    Pour récupérer le nom de la langue dans la table langue, je te conseille de fait simplement une jointure sur la table langue, voici la doc :
    http://framework.zend.com/manual/fr/....building.join
    Ensuite tu peux te documenter simplement sur les jointures en SQL :
    http://sqlpro.developpez.com/cours/sqlaz/jointures/
    Et tu peux trouver quelques exemples sur le forum, notamment ici :
    http://www.developpez.net/forums/d68...e/#post3982943

    Voilà, bonne chance, si tu as besoin d'aide, hésite pas à demander.

    PS: Au passage tu parle d'héritage dans ton titre mais ce n'est pas ça l'héritage, c'est juste un problème de jointure.

  3. #3
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    En fait, je sais pas si j'ai bien expliqué le schema de la base

    la table categories contient des enregistrements unique
    la table categories_lang contient plusieurs enregistrements dont le couple id_categorie/id_langue est unique
    la table langue contient les details de la langue

    Dans cette requete je souhaite obtenir tout les details de la categorie n°5 par exemple. Donc lorsque je fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = $this->_categoryTable->find(5)->current();
    J'obtient 1 ligne et c'est normal vu que c'est ce que je souhaite.
    là ou j'ai un problème c'est pour récupérer toutes les lignes de la table categories_lang avec en jointure les données de la table langue qui sont en relation avec le resultat de cette categorie

    et c'est là que j'ai un problème

  4. #4
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    J'ai bien compris ton problème et la meilleure solution est de faire une jointure entre les tables categories_lang et langue. Regarde d'un peu plus près les liens que je t'ai donné et dis moi en quoi cela ne va pas.

  5. #5
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    En fait j'ai trouvé ce que je voulais!
    Et excuse moi si je n'ai pas utilisé les bons termes!
    En fait il s'agissait plus de tables dépendantes....
    j'ai lu la doc et voici ce qu'il fallait faire en fait:

    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
    44
    class TCategory extends Zend_Db_Table_Abstract
    {
    	protected $_name = 'categories';
    	
    	protected $_primary = 'id';
    	
    	protected $_dependentTables = 'TCategoryLang';
    }
    
    class TCategoryLang extends Zend_Db_Table_Abstract
    {
    	protected $_name = 'categories_lang';
    	
    	protected $_primary = 'id';
    	
        protected $_referenceMap = array(
            'Langue' => array(
            'columns'           => 'id_langue',
            'refTableClass'     => 'TLangue',
            ),
            'Categorie' => array(
            'columns'           => 'id_categorie',
            'refTableClass'     => 'TCategory',
            ));
    }
    
    class TLangue extends Zend_Db_Table_Abstract
    {
    	protected $_name = 'langues';
    	
    	protected $_primary = 'id';
    	
    	protected $_dependentTables = array('TCategoryLang');
    	
    }
    
    // Ensuite dans mon controller :
    
    // Me retourne la catégorie
    $cat = $this->_categoryTable->find(5)->current();
    
    // Me retourne le contenu des tables dépendantes
    $catLang = $cat->findManyToManyRowset('TLangue','TCategoryLang');
    Je récupère bien par ligne les détails de la catégorie et les détails de la langue qui lui sont associée.

  6. #6
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Ah oui d'accord mais tu as utilisé la méthode du FullLoading. En tout cas ça aurait marché pareil avec une jointure

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

Discussions similaires

  1. heritage multiple
    Par r0d dans le forum C++
    Réponses: 6
    Dernier message: 21/04/2006, 09h40
  2. [POO] Héritage multiple Parent
    Par djshaker dans le forum Langage
    Réponses: 15
    Dernier message: 15/03/2006, 17h35
  3. Réponses: 9
    Dernier message: 25/05/2005, 18h17
  4. [Kylix] heritage multiple et interfaces :(
    Par le_barbu dans le forum EDI
    Réponses: 4
    Dernier message: 26/01/2004, 19h30
  5. Création multiple table paradox dans le code
    Par scarabee dans le forum C++Builder
    Réponses: 8
    Dernier message: 30/10/2002, 10h17

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