Symfony2 entity-Typ Formular nicht speichern, viele zu viele

Problem: Mein viele-zu-viele-Beziehung wird nicht gespeichert werden

Form ist korrekt wiedergegeben mit Checkboxen, und wenn ich manuell hinzufügen einer relation zwischen datatypegroup und einem Datentyp wird die checkbox auch aktiviert.

Aber wenn ich die Option einen anderen Datentyp und speichern Sie das Formular, die neue Beziehung ist nicht etabliert. Ich habe versucht mit und ohne by_reference in der form, aber kein Glück. Die addDatatype Methode auf die datatypegroup Entität wird nicht aufgerufen. Muss ich wirklich haben, um in einer Schleife die Daten in das Formular und finden Sie die Entitäten selbst?

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

Controller:

/**
 * @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(),
    );
}
  • Wenn Sie erwarten, dass Ihre addDatatype() - Methode aufgerufen werden, sollten Sie trotzdem eingestellt by_reference zu false. Dann, ich denke auch du solltest anrufen $em->persist($datatypegroup); vor dem Spülen (es sei denn, es geschieht irgendwo anders). Letzte Sache: ich habe gerade überprüft und das Unternehmen, das Feld nicht den by_reference Eigenschaft. Hast du schon mal mit einem collection form geben? Ich denke, es ist die Art und Weise, hier zu gehen.
  • Warum ist die Sammlung form geben, den Weg zu gehen? Lesen Sie die Dokumentation symfony.com/doc/current/reference/forms/types/entity.html und symfony.com/doc/current/reference/forms/types/collection.html ich glaube, dass die entity-form-Typ ist die richtige, wie ich will, es zu zeigen, alle verfügbaren Optionen, da sollte der Benutzer nicht in der Lage, erstellen Sie neue Elemente, wählen Sie einfach aus dem original.
  • Ich brauche nicht zu nennen, bestehen, ist der datatypegroup Entität bereits geladen ist, durch die ParamConverter und speichern von Daten dieser funktioniert einwandfrei, es ist nur die Beziehung zwischen datatypegroup und die Datentypen, nicht beibehalten.
  • möglich, Duplikat der Symfony2 Doctrine2 Viele Zu Viele Formular nicht Speichern von Entitäten
Schreibe einen Kommentar