Ordne mit Doctrine 2 eine Diskriminatorspalte einem Feld zu

7

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:

%Vor%

Gibt es eine Möglichkeit, dies in der Doktrin umzusetzen? Oder müsste ich die Klassenmetadaten in meiner Entity-to-Array-Methode lesen?

    
sroes 22.01.2014, 13:58
quelle

4 Antworten

16

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%     
Cerad 22.01.2014, 15:47
quelle
3

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.

    
Andris 28.08.2015 20:36
quelle
2

Habe gerade dieses Problem und löste es, ohne den Diskriminator als echtes Mitglied zu definieren:

%Vor%     
automatix 25.08.2017 17:06
quelle
1

Sie können die folgende Lösung verwenden:

%Vor%     
Ketsuo 15.01.2015 15:55
quelle

Tags und Links