symfony3: Erstellt ein Formular für eine Entität, die eine Spalte mit einer Beziehung von vielen zu eins hat

8

Ich habe eine "Aufgaben" -Tabelle, die auf eine "Estados" -Tabelle mit einem Fremdschlüssel aus der Spalte Tasks.taskestado zu Estados.estado verweist.

Hier ist das relevante XML-Mapping für Aufgaben:

%Vor%

Und für Estados:

%Vor%

In Anbetracht dessen versuche ich eine Aktion (novaAction ()) zu erstellen, um Aufgaben zu erstellen. Hier ist der Controller-Code:

%Vor%

Und der entsprechende TasksType-Code:

%Vor%

Die Option 'empty_data' war ein Versuch, das Formular zu erstellen, ohne ihm eine Instanz von Aufgaben zu übergeben. Außerdem habe ich das gleiche Ergebnis, wenn ich taskestado mit dem kommentierten Code, i. e., ohne Argumente.

Und hier ist die relevante Tasks-Entität:

%Vor%

Wenn ich die Seite öffne, erhalte ich den folgenden Fehler:

  

Entitäten, die an das Auswahlfeld übergeben werden, müssen verwaltet werden. Vielleicht beharren sie im Entity Manager?

Ich habe auch die CRUD ( bin/console doctrine:generate:crud --filter=Tasks ) generiert, so dass ich überprüfen konnte, wie es gemacht wurde, aber der Code ist ähnlich wie die Ergebnisse (nachdem einige Probleme im TasksType für einige datetime-Spalten behoben wurden).

Was mache ich falsch?

    
Nuno Pereira 08.01.2016, 21:21
quelle

3 Antworten

2

Ich habe endlich eine Antwort darauf bekommen, es war alles andere als offensichtlich.

Wie ich in der Frage gesagt habe, gibt es eine Viele-zu-Eins-Beziehung von Tasks.taskestado zu Estados.estado. Estados.estado ist eine Zeichenfolge, die Nullable sein kann, eine leere Zeichenfolge oder (normalerweise) eine nicht leere Zeichenfolge. Obwohl im Mapping nicht angegeben, ist der leere String der Standardwert für taskestado.

Ich habe bereits Daten in der Tabelle, und einer der Einträge für Estados.estado ist genau die leere Zeichenfolge.

Ich habe in der Frage nicht gepostet, aber ich habe die folgende Information in der Stack-Ablaufverfolgung dieser Ausnahme gesehen:

%Vor%

Der EntityType hat also die Werte aus der Datenbank abgerufen und versucht, sie zu rendern. Mit anderen Worten, sie waren bereits persistiert und das Problem konnte nicht wirklich darin liegen, wie ich die Entität initialisiert habe.

Ich erinnerte mich also an den leeren String-Wert für die Estados-Entität und versuchte, ihn aus der Datenbank zu entfernen: Problem gelöst, die TaskEstado-Entität wurde initialisiert und wie erwartet gerendert.

Jetzt muss ich einen Weg finden, um dies zu umgehen, aber die Lösung wurde gefunden.

Vielen Dank für Ihre Antworten.

    
Nuno Pereira 11.01.2016, 17:27
quelle
3

Wie der Fehler sagt, müssen Sie in Ihren Mappings für Tasks cascade = persist setzen. Zum Beispiel:

%Vor%

Auch statt $em->persist($form->getData()); Verwende $em->persist($task);

Sehen Sie, ob das funktioniert ...

    
Ratty 08.01.2016 21:34
quelle
1

Stellen Sie sicher, dass Sie

haben %Vor%

in der __construct() Ihrer Tasks -Klasse.

Dann 2 Hinweise:

Versuchen Sie, in Ihrem Code nur Englisch zu verwenden. Auf diese Weise erhalten Sie viel mehr Antworten. Als "Best Practice" verwenden Sie Singulars für Ihre Entitätsklassennamen wie Task , TaskEstado

    
mblaettermann 09.01.2016 12:30
quelle