Wir haben eine Kollektion mit Propel- und Symfony2-Formen erstellt. Wir können das Formular ohne Probleme speichern und können eine zweite Option mit der Sammlung hinzufügen. Wenn wir dann speichern und dann versuchen, eine dritte Sammlung hinzuzufügen, erhalten wir den folgenden Fehler:
%Vor%Stapelverfolgung
%Vor%Ich habe den entsprechenden Code unten gepostet, allerdings gibt es eine Menge Code. Wir haben uns gefragt, ob jemand das gleiche Problem erlebt hat.
Ich habe einen Fehlerbericht mit einem anderen Bit Code gesendet, der den gleichen Fehler erzeugt hat, aber ich habe keine Antwort erhalten. Der Fehlerbericht ist hier .
Dies ist ein Ausschnitt des relevanten Schemas:
%Vor%Unten ist die Ansicht (ohne Styling):
%Vor%Das Formular, das dies behandelt:
%Vor%Schließlich ist unten der Controller.
%Vor%Dein Schema ist etwas verwirrend für mich. Dieses Bit enthält drei Primärschlüssel mit zwei davon als Fremdschlüssel und einer davon als eindeutige Kennung für die Zeile:
%Vor% Ich vermute, dass viele Ihrer Probleme verschwinden werden, wenn Sie eine Sache auswählen und dabei bleiben. Entweder entfernen Sie id
, und Ihr primärer zusammengesetzter Schlüssel repräsentiert zwei fremde Tabellen, was vollkommen gültig ist, oder ändern Sie Ihre PRIMARY KEY
s in UNIQUE
-Einschränkungen für jeden Ihrer Fremdschlüssel und belassen Ihren Primärschlüssel als id
. Dies gilt auch vollkommen. Letztendlich wird Ihre Entscheidung auf Ihren Designanforderungen basieren.
Noch ein Hinweis: Vielleicht möchten Sie ein heavyIndexing
erstellen oder nicht, vor allem, wenn Sie es sind Verweis auf einzelne Spalten im Primärschlüssel. Ein zusammengesetzter Primärschlüssel erstellt einen Index für alle drei Spalten, nicht für jeden einzelnen. Das mag in Ihrem Projekt wichtig sein oder auch nicht, aber ich dachte, es wäre es wert, darauf hingewiesen zu werden.
Ich bin mir da nicht 100% ig sicher, aber ich bin ziemlich sicher, dass es diese Zeile ist:
%Vor%Sie werden feststellen, dass in der Methode findPkSimple in Ihrer BaseQuery-Klasse erwartet wird, dass der variable Schlüssel ein Array mit drei Werten (Indizes 0, 1, 2) sein muss.
Der Grund, warum ich unsicher bin, ist, ich weiß nicht, ob $ id nur ein Wert oder ein Array ist, da die Funktionsdefinition, die Sie haben, nicht auf den Typ beschränkt ist. (Ihre EditAction-Funktion)
Ich denke, da Sie drei Primärschlüssel haben, erwartet die Klasse, die generiert wird, dass Sie drei individuelle Werte haben, wenn Sie nach Primärschlüssel suchen.
Es könnte effektiver sein, wenn Sie nur einen Primärschlüssel und dann einen eindeutigen Index für diese drei Spalten haben, um die Eindeutigkeit zu gewährleisten (wenn Sie das vorhaben)