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

Symfony PHP Discussion :

Jointure Relation 1.n


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut Jointure Relation 1.n
    Bonjour à tous, je débute sur symfony
    j'ai une base de donnée relationnelle connecté à mon site
    avec une table hardware relier a une table hwsupportlog
    en relation 1.n avec une clé étrangere sur la table hwsupportlog

    j'effectue une requête doctrine qui fonctionne dans hardwareTable.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function getHardware()
    	{
     
          $q = Doctrine_Query::create()
            ->from('hardware h')
            ->leftjoin('h.typehardwareIdTypeHardware t')        
            ->leftjoin('h.softwareIdSoftwareCurrent s')
            ->leftjoin('h.hwsupportlogs r');
     
        	return $q->execute();
    	}
    dans actions.class.php j'appelle la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->hardwares = Doctrine_Core::getTable('hardware')->getHardware();
    et dans indexSuccess j'ai tout les champs sauf celui de la table hwsupportlog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <td><?php echo $hardware->typehardwareIdTypeHardware->getName() ?></td>
          <td><?php echo $hardware->typehardwareIdTypeHardware->getDescription() ?></td>
     
          <td> </td>
          <td><?php echo $hardware->hwsupportlogs->getHardwareIdHardware() ?></td>
    avec l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doctrine_Collection' does not have a method 'getHardwareIdHardware' in E:\wamp\bin\php\php5.3.0\PEAR\symfony\escaper\sfOutputEscaperObjectDecorator.class.php  on line 64
    je n'arrive pas à accéder a la table hwsupportlog $hardware->hwsupportlogs->getHardwareIdHardware()
    et je n'ai trouvé aucun exemple sur le site de symfony ni de doctrine pour ce cas là.

    merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 73
    Par défaut
    Bonjour,

    Je n'ai pas vraiment compris ce que tu fais, m

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 73
    Par défaut
    bonjour,

    Je n'ai pas vraiment compris ce que tu fais.
    Je vois pas trop l'intérêt des leftjoin, si toutes tes relations sont bien déclarées dans ton schema.yml.

    Sinon, au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $hardware->hwsupportlogs->getHardwareIdHardware() ?>
    essayes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?
    php foreach($hardware->getHwsupportlogs() as $log)
    {
    echo $log->getHardwareIdHardware() 
    }
    ?>

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    Merci pour ta réponse,
    oui toute mes relations sont dans mon schema.yml mais pour pouvoir afficher des champs de plusieurs table il faut bien que je fasse une requête sur la base de données d'où le LEFT JOIN,
    ma requête fonctionne bien (je la voit dans les logs de la debug toolbar)
    mais je n'arrive pas à récupérer le résultat de la table hwsupportlogs et du champ HardwareIdHardware()

    merci pour ton aide

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 73
    Par défaut
    Oui tu as raison concernant les left join j'étais à l'ouest.

    Ca ne fonctionne pas?

    Dans ta fonction, essayes peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function getHardware()
    {
    $q = Doctrine_Query::create()
            ->select('h.*, r.HardwareIdHardware')
            ->from('hardware h')
            ->leftjoin('h.typehardwareIdTypeHardware t')        
            ->leftjoin('h.softwareIdSoftwareCurrent s')
            ->leftjoin('h.hwsupportlogs r');
     
        	return $q->execute();
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    ma fonction getHardware avec ma requête marche nickel, elle renvoi bien la bonne requête, mais je ne sais pas commen recuperer les champ de la table hwsupportlog

    j'ai essayé ça mais ça ne marche pas
    $hardware->hwsupportlogs->getHardwareIdHardware() ?>

  7. #7
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Ca veut dire quoi exactement, "ça ne marche pas" ? Pas de résultats, méthode inconnue, autre erreur ?
    On peut voir ton schema .yml ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut
    Salut,

    Comme le disais noreaga10, tu ne pourras pas utiliser ce code car il s'agit d'une relation 1:n

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo $hardware->hwsupportlogs->getHardwareIdHardware() ?>
    $hardware->hwsupportlogs n'est pas un object Doctrine mais une collection d'objets Doctrine.

    Tu devra donc faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php 
    foreach($hardware->hwsupportlogs as $log)
    {
    echo $log->getHardwareIdHardware();
    }
    ?>

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    merci nsoinard ça marche nickel, effectivement c'était une collection d'objets, j'avais d'autre petite erreur mais vos réponses m'ont beaucoup aidé

Discussions similaires

  1. [8.1][Report Studio] La relation jointure
    Par yaloum dans le forum Cognos
    Réponses: 4
    Dernier message: 27/08/2008, 10h23
  2. Table de jointure relation n:n et création en SQL
    Par thibouille dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/11/2007, 15h17
  3. jointure avec 3 tables liées par la méme relation
    Par lenstoi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 29/08/2007, 10h17
  4. [jointure] relation avec table réflexive
    Par matech dans le forum Hibernate
    Réponses: 9
    Dernier message: 18/04/2007, 12h12
  5. Table de relation et sélection via jointure
    Par 73672 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 09/11/2004, 09h33

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