Einbetten einer Sammlung von Formularen Symfony2-Formulare mit Hinzufügen und Löschen erlaubt

9

In Symfony2, wenn ich eine Formulargruppe einbetten , die auf eine Viele-zu-Eins-Beziehung verweist in Doctrine und erlauben Hinzufügen und Löschen, wenn ich einen Datensatz von Anfang an löschen, einen am Ende hinzufügen, und einige in der Mitte bearbeiten, wie weiß das System, welche Datensätze mit welchen Daten zu aktualisieren?

Es gibt im Lernprogramm keine Informationen, die den Primärschlüssel der eingebetteten Daten weitergeben. Unter bestimmten Umständen werden meine Datensätze unnötigerweise gelöscht und erneut hinzugefügt, anstatt sie an Ort und Stelle zu bearbeiten (selbst wenn an dem betreffenden Datensatz keine Änderungen vorgenommen wurden). Dadurch werden die Felder in den Datensätzen, die nicht im Formular enthalten sind, getrennt, und sie werden vom DB-Modell auf ihre Standardwerte zurückgesetzt.

Gibt es eine Möglichkeit, den Primärschlüssel im Formular zu übergeben und Aktualisierungen zu verwenden, wenn die Daten zurückkommen?

    
rjmunro 07.03.2013, 14:07
quelle

3 Antworten

2

Wenn Sie die Auflistung (anhand der Entitäts-ID) für alle Abfragen indexieren möchten, können Sie einfach die Annotation indexBy in Ihrer Entitätsklasse verwenden.

%Vor%     
Akkumulator 23.06.2013 20:35
quelle
1

Basierend auf der Akkumulator Antwort und Kommentar und einigen Experimenten, habe ich Folgendes getan:

Erstellen Sie neue Felder (verwenden Sie Javascript als beschrieben in die Dokumentation ) mit __name__ wird nicht durch eine Zahl, sondern durch einen String ersetzt: new _ gefolgt von einer immer größer werdenden Zahl, die nichts mit der Liste zu tun hat (zB new_1, new_2, new_3 ...)

Ich muss die Primärschlüssel nicht in die Formulare schieben, und ich brauche auch keinen indexBy - das ist gut, weil indexBy das Gefühl hatte, dass es zu weit vom Formular entfernt war, und endete mit dem Aktion in einer Entfernung Anti-Pattern.

Warum das funktioniert:

  • PHP-Arrays sind nicht wie in anderen Sprachen. Da es sich immer um Wörterbücher handelt, können Sie ihnen Zeichenfolgeschlüssel hinzufügen, auch wenn sie nur mit numerischen Schlüsseln beginnen.
  • Da die Symfony-Sammlung nach Feldnamen zugeordnet ist, stimmen neue Felder nicht mit vorhandenen Daten überein, und gelöschte Felder werden nicht mit vorhandenen Daten abgeglichen (und somit aus der Gruppe entfernt)
Radu C 06.04.2016 18:41
quelle
0

Eine Möglichkeit, die primäre ID zu übergeben, ist die Verwendung von INDEX BY .

Beispiel: Ich habe eine Entität namens Kunde und ein Kunde hat mehrere E-Mails. In meiner Customer-Repository-Klasse kann ich angeben, dass meine Sammlung nach der primären ID der E-Mail-Adresse indexiert werden soll.

%Vor%

Wenn Sie dies tun, wäre der generierte Name des Eingabe-Tags

%Vor%

Beim Absenden des Formulars bindet Symfony die Anforderungswerte entsprechend den eingegebenen Namen.

    
Mr. 14 14.03.2013 07:36
quelle

Tags und Links