问题:我的多对多关系没有被保存
使用复选框正确呈现表单,如果我手动添加数据类型组和数据类型之间的关系,则还会选中该复选框。
但是,如果我检查另一个数据类型并保存表单,则不会建立新关系。我在表单中尝试过with_reference,但没有运气。也不调用datatypegroup实体上的addDatatype方法。我是否真的需要循环表单数据并自己查找实体?
FormBuilder:
$builder
->add('name', 'text')
->add('datatypes', 'entity', array(
'by_reference' => true,
'multiple' => true,
'expanded' => true,
'class' => 'T\DBundle\Entity\Datatype',
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
$qb = $er->createQueryBuilder('d');
return $qb->orderBy('d.name', 'ASC');
}
));
DoctrineMapping:
T\DBundle\Entity\DatatypeGroup:
type: entity
table: DatatypeGroup
manyToMany:
datatypes:
targetEntity: T\DBundle\Entity\Datatype
mappedBy: datatypeGroups
T\DBundle\Entity\Datatype:
type: entity
table: Datatype
manyToMany:
datatypeGroups:
targetEntity: T\DBundle\Entity\DatatypeGroup
inversedBy: datatypes
joinTable:
name: Datatype_DatatypeGroup
joinColumns:
datatype_id:
referencedColumnName: id
inverseJoinColumns:
datatypeGroup_id:
referencedColumnName: id
控制器:
/**
* @Route("/edit/{id}", name="edit")
* @Secure("ROLE_USER")
* @Template("TDBundle:DatatypeGroup:form.html.twig")
*/
public function editAction(Request $request, DatatypeGroup $datatypegroup) {
$editForm = $this->createForm(new DatatypeGroupType(), $datatypegroup);
$editForm->handleRequest($request);
if ($editForm->isValid()) {
/** @var EntityManager $em */
$em = $this->getDoctrine()->getManager();
$em->flush();
return $this->redirect($this->generateUrl("edit",array("id" => $datatypegroup->getId())));
}
return array(
'datatypegroup' => $datatypegroup,
'form' => $editForm->createView(),
);
}
答案 0 :(得分:4)
我不知道如何将其标记为副本,但我终于找到了一个回答我的问题的问题:Symfony2 Doctrine2 Many To Many Form not Saving Entities
必须颠倒学说映射,以便数据类型组是关系的拥有类型。