2017-10-31 2 views
0

Ich habe ein Problem bei der Validierung UniqueEntity mit mehreren Feldern. Ich habe den folgenden Code:Symfony Form kann mehrere uniqueEntity-Felder nicht validieren

/** 
* @ORM\Entity() 
* @ORM\Table(name="app_languages", uniqueConstraints={@ORM\UniqueConstraint(name="IDX_LANGUAGE_CONSTRAINT", columns={"language_id", "app_id"})}) 
* 
* @UniqueEntity(fields={"languages", "app"}) 
*/ 
class AppLanguages extends AbstractEntity 

Wenn ich versuche, das gleiche language_id posten und APP_ID Ich bin ein PDOException > PDOException > UniqueConstraintViolationException

bekomme ich die documentation von symfony geprüft Ich habe auch diese Antwort here aber es funktioniert nicht arbeiten wie es soll. Es gibt auch einen Validator für Symfony\Bridge\Doctrine\Validator\Constraints unter dem Namensraum getan, aber noch ist dies nicht funktioniert ...

Antwort

0

Mehr Dinge:

Zuerst habe ich in eine potenzielle Typo Ausgabe sehen kann, was Sie bisher gezeigt haben, wie In der Annotation der Tabellenbeschränkung verweisen Sie auf die Spalte "language_id" (singular), während Sie in Ihrer UniqueEntity Annotation auf das Feld "languages" (Plural) verweisen. Versuchen Sie daher, Ihre Feld-/Spaltendefinition zu überprüfen.

Die zwei Möglichkeiten, wie Sie versuchen, Ihre Constraint haben verschiedene Zwecke zu erstellen:

@ORM\UniqueConstraint 

durch Schemaänderungen in der Datenbank generieren soll eine SQL UNIQUE constraint hinzufügen. Dadurch wird Ihr Datenbankmodul gezwungen, jeden Eintrag in der Tabelle zu überprüfen und einen Fehler zu erzeugen (Beispiel: "Fehler # 1062" für MySQL), der vom PDO in Ihre PHP-Ausgabe übertragen werden kann.

@UniqueEntity 

Auf der anderen Seite wird UniqueEntity gemeint Ihre PHP-Entity (tut eine form-> $ isValid() für exemple) zu validieren, indem eine SELECT-Anweisung Datenbank Brennen und prüfen, ob es irgendwelche Ergebnisse ähnlich wie sind die vorgelegten Werte.

Punkt ist, lesen Sie gut und verstehen die Ausnahme, die Sie zurück erhalten, wird Ihnen helfen, zu verstehen, welche Einschränkung genau das Problem verursacht und die Ursache zu finden (ist es ein Problem mit den Daten bereits in der Basis?).

Darüber hinaus müssen Sie abhängig von Ihren Anforderungen möglicherweise nicht die 2 Einschränkungen einfügen und nur die @ UniqueEntity oder die @UniqueConstraint verwenden.

EDIT:

Sie könnten versuchen, die repositorymethod Option zu verwenden, um die Anforderung für die Validierung verwendet, um durchzusetzen, indem Sie Ihre eigene Repository-Methode zu schaffen.

Hoffe, das hilft

+0

gut das Problem ist, wenn ich nur UniqueEntity für diese 2 Felder verwende, übergibt es die Validierung. Deshalb habe ich nur für die Sicherheit jetzt die Einschränkung hinzugefügt und dann einen try catch verwendet, um den Formularfehler zu setzen (ich weiß, dass es nicht elegant ist, aber es funktioniert ..) Ich habe bereits Daten in der Datenbank. Stell dir vor, ich habe app_id = 1 lang_id = 1 -> gespeichert app_id = 1 lang_id = 2 -> gespeichert lang_id = 2 -> fehlgeschlagen. Wenn die Formularvalidierung nicht funktioniert, sollte die sql-Einschränkung für den Moment ausreichen. –

+0

@HerrNentu 'Mein Schlechter dann missverstand ich das Problem (dachte, du hast nicht verstanden warum du eine PDO Exception bekommst, während es andersherum ist). Ich fand diesen geschlossenen Bugreport, der eine interessante Schlussfolgerung hat, die dein Problem erklären könnte : [link] (https://github.com/symfony/symfony/issues/6727) –