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 :

Persist entité cascade et postPersist


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 21
    Points
    21
    Par défaut Persist entité cascade et postPersist
    Bonjour! Un nouveau petit souci dans le cadre du développement de mon forum.

    J'ai une entité Post et une entité Topic. Lorsque je créer un topic je créé par la même occasion un Post. Voila le contrôleur :

    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
    $topic = new Topic();
    		$post = new Post();
            	$post->setTopic($topic);
    		$topic->addPost($post);
    		$topic->setParentForum($forum);
     
    		$form = $this->createForm(new \MG\ForumBundle\Form\TopicType(), $topic);
    		$request = $this->getRequest();
    		if ($request->getMethod() == 'POST') {
    			$form->bind($request);
    			if ($form->isValid()) {
    				$em = $this->getDoctrine()->getManager();
     
    				$post->setTitle($topic->getSubject());
     
                           		$em->persist($topic);
     
    				$em->flush();
    Ensuite, j'ai un eventlistener sur le PostPersist de l'entité Post. Mais depuis une mise à jour récente de mes vendors, j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Binding entities to query parameters only allowed for entities that have an identifier.
    En fait dans mon listener j'essaye de manipuler l'entité topic liée à l'entité post. Le problème c'est qu'il semblerait que l'entité topic ne soit pas encore persistée et donc qu'elle n'a actuellement pas d'identifiant.

    Des idées?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    Il me semble qu'il faut:
    - soit persister l'objet topic et ensuite modifier le titre de l'objet post. L'objet topic aura donc un id.
    - soit updater l'objet post qui doit en cascade persister l'objet topic... dans la relation qui lie topic et post on doit trouver cascade="persit","update"...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Le post est bien persisté en cascade dans l'entité Topic.
    Le mécanisme fonctionne bien globalement. Si je persiste un Topic ça persiste automatiquement son post, jusque là tout va bien.

    Le problème vient lors de l'événement PostPersist de l'entité Post. Dans cet eventListener j'ai besoin de récupérer l'entité topic et de faire un traitement dans la base de données sur une autre table, le soucis c'est que lors de cet event, Topic n'a pas d'identifiant.

  4. #4
    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
    C'est normal, si ton id est généré automatiquement par ta base de donnée, ton objet n'aura pas d'identifiant après le persist mais après le flush. [EDIT] => dans le cas d'un insert et non d'un update bien sur.

    Tu peux soit gérer ton cas avec le callback onFlush, ou bien découper ton process en plusieurs étapes.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    A je vais essayer le onFlush. Ce qui est étrange, c'est que ça fonctionnait très bien avant que je ne fasse de mise à jour de Symfony2.
    Pour le moment j'ai contourné avec une redondance de code...

Discussions similaires

  1. [2.x] Update attribut entité cascade
    Par jeyGey dans le forum Symfony
    Réponses: 4
    Dernier message: 24/06/2013, 18h00
  2. Réponses: 2
    Dernier message: 12/03/2010, 16h10
  3. Réponses: 2
    Dernier message: 29/04/2009, 18h58
  4. Persist en cascade
    Par stylatone dans le forum Hibernate
    Réponses: 2
    Dernier message: 02/02/2008, 13h23
  5. Persistance en cascade
    Par aloha dans le forum JPA
    Réponses: 8
    Dernier message: 30/11/2007, 11h39

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