Supprimer un élément de la relation oneToMany
J'ai la Galerie ci-dessous entité
class Gallery
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="Tessa\GalleryBundle\Entity\Photo", mappedBy="gallery", cascade={"persist", "remove"})
*/
private $photos;
/* ... */
}
Ce gallery
est lié avec un manyToOne
relation à un PointOfInterest
entité. Voici la déclaration
class PointOfInterest
{
/* ... */
/**
* @ORM\ManyToOne(targetEntity="Tessa\GalleryBundle\Entity\Gallery", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $gallery;
/* ... */
J'ai aussi utiliser un Formulaire pour mettre à jour le PointOfInterest
entité. Voici le formulaire de déclaration
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text')
->add('gallery', new GalleryType())
;
}
et la GalleryType
déclaration.
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('photos', 'collection', array('type' => new PhotoType(),
'required' => false,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
))
;
}
Quand j'ai modifier le PoI
je peux ajouter des photos à la galerie sans problème, mais je ne peux pas supprimer quoi que ce soit.
J'ai essayé de crochet sur la galerie PreUpdate
, mais il n'est jamais appelé. J'ai imprimé sortie en removePhotos
méthode de Gallery
entité, et les photos sont supprimées de la galerie. J'ai ensuite suspect de la Galerie pour ne jamais être conservé.
Voici le code, alors je persiste, l' PoI
après le montage.
private function handleForm($elem, $is_new)
{
$form = $this->createForm(new CircuitType, $elem);
$request = $this->get('request');
if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($elem);
$em->flush();
return $this->redirect($this->generateUrl('tessa_circuit_index'));
}
}
return $this->render('TessaUserBundle:Circuits:add.'.'html'.'.twig',
array(
'form' => $form->createView(),
'is_new' => $is_new,
));
}
- Quelle est l'erreur affichée ?
- Il n'y a pas d'erreur. Je ne sais pas comment modifier mon code pour faire de ce comporter comme je veux.
- Dupliquer: stackoverflow.com/questions/8923919/...
Vous devez vous connecter pour publier un commentaire.
Il est article dans Symfony2 livre de recettes à propos de la manipulation de ce type de situation. Comme vous l'avez OneToMany relation, vous devez supprimer les objets associés manuellement dans le contrôleur.
Modifier:
Ou vous pouvez faire usage de La Doctrine de l'orphelin suppression fonctionnalité.
orphanRemoval=true
sur$photos
association. Et puis d'appeler$photo->setGallery(null)
à l'intérieur deremovePhotos($photo)
méthode de la galerie.