Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je sèche complètement sur un problème avec Doctrine2. J'ai mon controller qui possède une action "add" et "edit" (classique) qui, respectivement, ajoute et modifier une entité grâce à un formulaire. Le formulaire est le même pour ces deux actions. Lorsque j'essaie de modifier une entité existante dans l'action "edit", ça ne fonctionne pas (aucun problème pour l’auto-complétion des champs cependant). J'ai vérifié après la validation du formulaire, l'entité est bien modifiée, mais le "persist" et le "flush" ne semble pas fonctionner (je n'ai pourtant aucune erreur affichée). J'ai un autre formulaire qui modifie une autre entité où je m'y prends exactement de la même façon et où ça fonctionne.
D'où est-ce que ça peut venir ?
Dernière modification par Seryus (05-05-2014 11:18:09)
Hors ligne
Salut, sans voir ton code aucune idée.
Hors ligne
Le code de mon entité (sans les getters/setters) :
[lang=php] /** * Question * * @ORM\Table(name="question", indexes={@ORM\Index(name="fk_question_level", columns={"level_id"})}) * @ORM\Entity(repositoryClass="Application\Model\Repository\Question") */ class Question { /** * @var integer * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ protected $id; /** * @var string * * @ORM\Column(name="label", type="string", length=5000, nullable=false) */ protected $label; /** * @var boolean * * @ORM\Column(name="is_open", type="boolean", nullable=false) */ protected $isOpen; /** * @var \Application\Model\Entity\Level * * @ORM\ManyToOne(targetEntity="Application\Model\Entity\Level", inversedBy="questions") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="level_id", referencedColumnName="id") * }) */ protected $level; /** * @var \Doctrine\Common\Collections\Collection * * @ORM\OneToMany(targetEntity="Application\Model\Entity\Answer", mappedBy="question", cascade={"persist", "remove"}, orphanRemoval=true) */ protected $answers; /** * Constructor */ public function __construct() { $this->answers = new \Doctrine\Common\Collections\ArrayCollection(); } }
Mon action "edit", après validation du formulaire :
[lang=php] if($form->isValid()) { $data = $form->getData(); var_dump($data); //Me retourne bien mon objet entité modifié $entityManager->persist($data); $entityManager->flush(); }
Petite spécificité : "answers" est une classe "parente". Selon ce qu'il y a dans "isOpen" de question, le type de réponse contenu dans "answers" changera (ce sera soit "CloseAnswer", soit "OpenAnswer" qui héritent tout deux de "Answer").
Hors ligne
Bon c'était une erreur bête de ma part encore une fois. Je viens de remarqué que, au lieu d'être modifié dans la base de données, mes entités sont ajoutées comme de nouveaux enregistrements. L'erreur était : oubli d'un bind de l'entité existante au formulaire avant la modification.
Hors ligne
Pages: 1