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

Doctrine2 PHP Discussion :

Récupérer données d'une table liée


Sujet :

Doctrine2 PHP

  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 502
    Par défaut Récupérer données d'une table liée
    Bonjour,

    Après un bon moment de recherche, je poste ici ma problématique en espérant que vous pourrez me dire comment faire plus simplement.

    J'au deux tables qui sont lié et je me sert d'une des tables pour en faire un menu déroulant.

    Soit le Builder donne ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     ->add('id_type_contrat','entity', 
                        array('class' => 'GestaPontauryBundle:TypeContrat','property' => 't_type_contrat'))
    ce qui génère exactement ce que je veux en terme de html

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <p>
    <label for="gesta_contratbundle_contrattype_id_type_contrat" class=" required">Contrat</label>
    <select id="gesta_contratbundle_contrattype_id_type_contrat" name="gesta_contratbundle_contrattype[id_type_contrat]" required="required">
    <option value="1">Eft</option>
    <option value="3">Stage</option>
    <option value="174">F70Bis</option>
    </select>
    </p>

    le souci est qu'au moment de valider via les outils Doctrine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $em = $this->getDoctrine()->getEntityManager();
                    $em->persist($formData);
                    $em->flush();
    j'obtient l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: spl_object_hash() expects parameter 1 to be object, integer given in /Users/gg/Sites/gesta/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php line 1095
    Et a partir de là on peut dire ce qu'on veut, mais Symfony n'est pas très clair dans ses messages d'erreurs

    Le souci est que Doctrine me renvoir la ligne complète de la table qui me sert pour mon menu, plutôt que simplement la value.

    Du coup il faut pouvoir extraire cette données a travers les getters et setters de la table qui sert au menu au travers du getter de la premiere table (pas sur d'être clair là).

    En gros pour moi avoir le resultat du value <option>, je dois le récupérer comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $formData->getIdContrat()->gettNom()
    Du coup je fais ceci pour valider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $formData->setIdContrat($formData->getIdContrat()->getTNom());
    Voyez-vous plus simple ?

    Merci.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    $formData data correspond a quoi ? parce que c'est un Entity que tu dois mettre dedans

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 502
    Par défaut
    Je te met la méthode de mon 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
      public function ajouterAction() {
     
            $entity = new Contrat();
            $form = $this->createForm(new ContratType(), $entity);
     
            $request = $this->get('request');
     
            if ($request->getMethod() == 'POST') {
     
                $form->bindRequest($request);
                $formData = $form->getData();
     
                if ($form->isValid()) {
     
                    //insertion de l'id du participant
                    $formData->setIdParticipant(1);
     
     
     
     
                    $em = $this->getDoctrine()->getEntityManager();
                    $em->persist($formData);
                    $em->flush();
     
     
                }
            }
     
     
            return $this->render('GestaContratBundle:Contrat:ajouter.html.twig', array(
                        'entity' => $entity,
                        'form' => $form->createView()
                    ));
        }

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est l’entité qu'il faut mettre

    voici un create de base

    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
    /**
     * Creates a new User entity.
     *
     * @Route("/create", name="user_create")
     * @Method("post")
     * @Template("AcmeBundle:User:new.html.twig")
     */
    public function createAction()
    {
        $entity  = new User();
        $request = $this->getRequest();
        $form    = $this->createForm(new UserType(), $entity);
        $form->bindRequest($request);
     
        if ($form->isValid()) {
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($entity);
            $em->flush();
     
            return $this->redirect($this->generateUrl('user_show', array('id' => $entity->getId())));
     
        }
     
        return array(
            'entity' => $entity,
            'form'   => $form->createView()
        );
    }

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 502
    Par défaut
    Bonjour,

    Merci pour cette réponse en fait je fait deux erreurs (corrigée )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //on doit mettre un Entity Participant
     $formData->setIdParticipant($Participant);
     
     
     
     
                    $em = $this->getDoctrine()->getEntityManager();
                    //effectivement ai besoin d'un entity
                    $em->persist($entity);
    Merci de ton aide et aussi à Anne-Lise

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

Discussions similaires

  1. Modifier le type de donné d'une table liée
    Par ZoomBox dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 28/06/2011, 11h58
  2. Récupérer les données d'une table liée
    Par ludojojo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/06/2010, 22h24
  3. Réponses: 5
    Dernier message: 27/05/2008, 14h58
  4. Réponses: 1
    Dernier message: 23/11/2006, 15h22
  5. Réponses: 1
    Dernier message: 19/02/2006, 13h32

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