In meinem Projekt habe ich mehrere Klassentabelle-Vererbungen so:
%Vor%Ich habe eine Methode, die Entitäten basierend auf Feldern mit öffentlichen Gettern in Arrays umwandelt. Das Problem hier ist, dass ich die Vererbungsinformationen in meinem Array verliere, weil der Diskriminatorwert nicht in einem Feld gespeichert ist.
Also, was ich versucht habe, war folgendes, hoffend, dass die Doktrin automatisch $disc
setzen würde:
Gibt es eine Möglichkeit, dies in der Doktrin umzusetzen? Oder müsste ich die Klassenmetadaten in meiner Entity-to-Array-Methode lesen?
Leider gibt es keine dokumentierte Möglichkeit, die discr-Spalte einer Entität zuzuordnen. Das liegt daran, dass die Discr-Spalte wirklich Teil der Datenbank und nicht der Entität ist.
Es ist jedoch üblich, den discr-Wert direkt in Ihre Klassendefinition einzugeben. Es wird sich nicht ändern und Sie werden immer die gleiche Klasse für den gleichen Wert bekommen.
%Vor%Hier ist ein kleines Beispiel von dem, was ich in einem meiner ZF2-Projekte habe (mit Doctrine MongoDB ODM):
%Vor% Was ich getan habe, ist, dass ich eine benutzerdefinierte Schnittstelle DiscriminatorAwareInterface
implementiert habe und die Überprüfungen nur auf Klassen anwenden, die sie implementieren (in Ihrem Fall wäre es die Klasse, die alle "diskriminierten" Klassen erweitern.)
Als Ergebnis habe ich einen Code, der so aussieht:
%Vor%Ich bin mir ziemlich sicher, dass es dasselbe sein wird, wenn Sie das Standard-ORM verwenden, außer dass Sie anstelle eines Dokumentmanagers einen Entity Manager haben.
Tags und Links doctrine2