【发布时间】:2015-06-11 08:18:19
【问题描述】:
我有两个实体。容器和学校类型。实体容器与实体 Schooltype 具有“oneToMany”关系。
实体容器:
/**
* @ORM\OneToMany(targetEntity="App\MyBundle\Entity\SchoolType", mappedBy="container", cascade={"persist", "remove"})
*/
protected $schooltype;
实体学校类型:
/**
* @ORM\ManyToOne(targetEntity="App\MyBundle\Entity\Container", inversedBy="schooltype")
* @ORM\JoinColumn(name="container_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $container;
现在我为容器创建了一个表单,所以我可以添加一个或多个学校类型。在我的实体容器中,我修改了“removeSchooltype”方法,它看起来像。
实体容器,学校类型的移除方法:
public function removeSchooltype(\App\MyBundle\Entity\SchoolType $schooltype)
{
$this->schooltype->removeElement($schooltype);
$schooltype->setContainer(null);
}
表单容器类型:
->add('schooltype', 'entity', array(
'class' => 'AppMyBundle:Schooltype',
'choices' => $schoolTypes,
'label' => 'msg.schoolType',
'translation_domain' => 'messages',
'multiple' => true,
'expanded' => false)
)
我尝试在我的控制器中处理存储过程。
容器控制器,编辑方法:
$object = new Container();
// Exists any object?
if (!$object) {
$this->get('session')->getFlashBag()->add('danger', $this->get('translator')->trans('notfound'));
return $this->redirect($this->generateUrl('app_container_list'));
}
$form = $this->createForm($this->get('form.type.container'), $object)->add('save', 'submit', array('label' => 'save', 'translation_domain' => 'messages', 'attr' => array('class' => 'btn btn-primary')));
$form->handleRequest($request);
// Check if form isValid
if ($form->isValid()) {
// Store object
$em = $this->getDoctrine()->getManager();
$em->persist($object);
// Flush statements
$em->flush();
$em->clear();
$this->get('session')->getFlashBag()->add('info', $this->get('translator')->trans('objectEdited', array()));
return $this->redirect($this->generateUrl('app_container_list'));
}
return $this->render('AppMyBundle:Container:edit.html.twig', array("form" => $form->createView()));
一切正常,我可以在我的容器中添加一种或多种学校类型,这已成功保存。但是,如果我从表单中的选择框中删除一个学校类型并发布我的表单,容器和学校类型之间的关系将不会被删除,有人提示为什么会发生这种情况?
【问题讨论】:
标签: symfony