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 eingestelltby_reference
zufalse
. 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 denby_reference
Eigenschaft. Hast du schon mal mit einemcollection
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, wie mark diese als eine doppelte, aber ich fand schließlich eine Frage, die Beantwortung meiner Frage: Symfony2 Doctrine2 Viele Zu Viele Formular nicht Speichern Entitäten
Lehre mapping musste rückgängig gemacht werden, so dass die datatypegroup war die besitzende Art der Beziehung.