Symfony2实体表单类型不能保存多对多

时间:2014-03-09 10:42:50

标签: forms symfony

问题:我的多对多关系没有被保存

使用复选框正确呈现表单,如果我手动添加数据类型组和数据类型之间的关系,则还会选中该复选框。

但是,如果我检查另一个数据类型并保存表单,则不会建立新关系。我在表单中尝试过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(),
    );
}

1 个答案:

答案 0 :(得分:4)

我不知道如何将其标记为副本,但我终于找到了一个回答我的问题的问题:Symfony2 Doctrine2 Many To Many Form not Saving Entities

必须颠倒学说映射,以便数据类型组是关系的拥有类型。