gpt4 book ai didi

symfony - 从一对多关系中删除项目

转载 作者:行者123 更新时间:2023-12-03 10:19:21 24 4
gpt4 key购买 nike

我有以下画廊实体

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;

/* ... */
}

gallerymanyToOne 相关联与 PointOfInterest 的关系实体。这是声明
class PointOfInterest
{
/* ... */
/**
* @ORM\ManyToOne(targetEntity="Tessa\GalleryBundle\Entity\Gallery", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $gallery;
/* ... */

我还使用表单来更新 PointOfInterest实体。这是表格声明
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text')
->add('gallery', new GalleryType())
;
}

GalleryType宣言。
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
))
;
}

当我编辑 PoI我可以毫无问题地将照片添加到图库,但我无法删除任何内容。

我试图勾搭画廊 PreUpdate ,但它从未被调用。我在 removePhotos 中打印输出 Gallery的方法实体,照片将从图库中删除。然后我怀疑画廊永远不会被坚持。

这是我坚持 PoI 时的代码编辑后。
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,
));
}

最佳答案

article in Symfony2 cookbook关于处理这种情况。由于您有 OneToMany 关系,您必须在 Controller 中手动删除相关对象。

编辑 :
或者您可以使用 Doctrine's orphan removal特征。

class Gallery
{
//...

/**
* @ORM\OneToMany(targetEntity="Photo", mappedBy="gallery", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $photos;

//...

public function removePhotos($photo)
{
$this->photos->remove($photo);
$photo->setGallery(null);
}
}

关于symfony - 从一对多关系中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16197483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com