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 :

relation manytoone, recuperer des champs [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 19
    Points : 12
    Points
    12
    Par défaut relation manytoone, recuperer des champs
    bonjour,

    j'ai une structure de base de données avec des relations manytoone, j'ai notamment deux entités, cra et tache, ces deux entités sont liées par une relations manytoone par le champs idtache que je définit comme suit dans l'entité cra:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
       /**
         * @var \Tache
         *
         * @ORM\ManyToOne(targetEntity="Tache")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="idtache", referencedColumnName="idtache")
         * })
         */
        private $idtache;

    j'aimerais maintenant à partir du controleur récupérer tous les champs de l'entité cra et les afficher dans la vue twig

    code dans le controleur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
      $em=$this->getDoctrine()
              ->getManager();
    $getcra = $em
    			->getRepository('EliprojectCollaborateurBundle:Cra')
    			->findBy(array('idcollaborateur'=>$id));
    			return $this->render('EliprojectCollaborateurBundle:Collaborateur:saisieCra.html.twig', array('craresult'=>$getcra,));
    code dans la vue twig:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
        {%for myresult in craresult %}
         {{myresult.idtache}}
        {{ endfor }}


    à ce niveau déja quand j'execute ce code j'ai une page blanche, sans erreur ou quoi que ce soit.

    de plus, mon but ultime est de recuperer à partir de l'id tache le nom de la tache qui es un champs dans l'entité tache.

    Excusez si c'est tordu mais c'est la structure existante de la base de données qui me l'impose.
    J'aimerais bien savoir pourquoi j'ai une page blanche au lieu d'une belle erreur qui pourrait me guider et aussi comment atteindre mon but

    merci de votre aide

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Hello,

    Dans l'ordre :

    - Ton entité : je te conseille d'appeler ta variable $tache et non $idtache, puisqu'avec Doctrine tu ne récupère pas un id d'une table mais un objet. Il faut penser objet, pas base de données.
    - Ton controller : si tu veux vraiment récupérer toutes les entités cra, c'est un findAll qu'il faut faire, là tu as déjà posé une condition, et ta condition se fait sur un champ qui est soit mal nommé, soit n'existe pas (idcollaborateur ne devrait pas exister en objet, tu ne devrais trouver que collaborateur, et lui passer un objet).
    - Ton twig : le morceau de code va tenter d'afficher comme du texte ce que tu lui passes, et même si tu nommes mal tes variables, tu essayes d'afficher une collection d'objet.
    - Ta page blanche : utilise app_dev.php pour passer en mode debug, voir les erreurs et la debug toolbar.

    ++

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    merci nico_F de ta réponse,

    j'ai juste quelques appréhension:

    - je ne peux pas faire le findall ici car je fait un filtre par rapport à l'utilisateur connecté
    - idcollaborateur a sa place ici cra comme je l'ai dit dans mon poste, je suis contraint par le schema de la base de données qui existait déja et ce champs est récupéré depuis l'annuaire LDAP
    - jusque l'a j'ai pas de problème, mon problème survient au moment ou je doit récupérer les champs de l'entity tache à partir de idtache.

    je sais pas si j'ai apporté plus d'éléments

    merci

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 98
    Points : 163
    Points
    163
    Par défaut
    Comme te l'as expliqué Nico_F, il faut penser objet.
    quand tu vas faire ta requete doctrine vas te renvoyer des objets entiers, pas juste l'ID.
    Pour avoir les messages d'erreur et savoir quand sa foire, il faut faire app.php par app_dev.php sinon on ne pourras rien pour toi.

  5. #5
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Tu peux nommer tes variables correctement sans avoir à changer le schéma.
    Je réitère, dans les entités tu ne devrais trouver aucun ID que la clé primaire de chaque entité : rien d'autre. Les autres relations sont des OBJETS => donc on ne devrait pas avoir idcollaborateur, mais collaborateur.

    Ça ne change que le nom de ta variable : le mapping et le nom de la table en BDD restent inchangés. En soi, ça n'apporte aucune modification directe à ton code, si ce n'est de la lisibilité : parce que je sais pas toi, mais moi perso quand je vois une variable 'idcollaborateur' je me dis bêtement que je vais avoir l'id d'un collaborateur, or là c'est l'objet collaborateur tout entier que tu vas avoir grâce à Doctrine : autant donner un nom logique.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    bonjour,

    justement, NICO-F, idcollaborateur est l'id du collaborateur et non l'objet en entier, comme je l'ai dit plus haut, c'est pas moi qui ait conçus la base de donnée, elle a été au départ conçue pour une application lotus et je dois actuellement la retranscrire en PHP sauf que je ne dois absolument pas toucher au schéma de la base de données. j'ai fait du reverse engeeneering pour recuperer le schemas de la bd et la faire correspondre à Symfony. Voila

  7. #7
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       /**
         * @var \Tache
         *
         * @ORM\ManyToOne(targetEntity="Tache")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="idtache", referencedColumnName="idtache")
         * })
         */
        private $idtache;
    Navré de te contredire mon grand : mais tu reçois bel et bien un objet. Ce n'est pas parce qu'il y a une colonne idtache en BDD que tu reçois un id.
    Lorsque tu récupères ton entité 'cra' et que tu utilises le getter vers cet attribut, que tu l'aies chargé via une requête complète ou que Doctrine fasse son boulot de lazy-loading, tu reçois l'objet Tache comme l'indique l'annotation dans ton morceau de code.

    On a bien compris que tu n'avais pas touché à la BDD, que tu ne pouvais pas etc. Cela dit une base de données classique ressemble à l'identique à une base de données classique que l'on utilise avec de l'objet.
    Renseigne toi un peu sur le fonctionnement d'un ORM et en particulier celui de Doctrine. Tu n'as pas besoin de modifier la BDD pour avoir des objets, c'est l'ORM qui s'occupe de cette sorcellerie.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2013
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    merci nico_F de m'avoir ouvert les yeux. En effet c'est bien un objet que je recevais.je cherchais la solution alors qu'elle etait tout à coté.

    si ca peut servir à quelqu'un d'autre il fallait juste faire dans la vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        {%for myresult in craresult %}
         {{myresult.idtache.tachLibelle}}
        {{ endfor }}
    merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/05/2008, 13h09
  2. Recuperer des champs d'une table
    Par cchampion2fr dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/10/2006, 11h37
  3. Problème awk pour récuperer des champs
    Par ab_2006 dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 21/09/2006, 09h36
  4. [vb6] recuperation des champs par un listbox
    Par lumbroso dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 22/08/2006, 10h41
  5. recuperation des champs provenant un pgm en javascript
    Par leclone dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 01/06/2006, 11h04

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