Verwenden von Diskriminator in einer Entität, die eine andere erweitert

8

Ich versuche, Discriminator in einer Entität zu verwenden, die sich von einer anderen aus erstreckt. Dies ist der Code, den ich gemacht habe:

%Vor%

Aber ich bekomme diesen Fehler, während ich den Befehl doctrine:schema:validate :

ausgeführt habe
  

[Doctrine \ ORM \ Mapping \ MappingException] Entität   'UsuarioBundle \ Entity \ Usuario' muss Teil der Diskriminatorkarte sein   von 'UsuarioBundle \ Entity \ Usuario' in der   Vererbungshierarchie Alternativ können Sie machen   'UsuarioBundle \ Entity \ Usuario' eine abstrakte Klasse, um dies zu vermeiden   Ausnahme von auftreten.

Irgendeine Möglichkeit, das zu beheben? Es ist möglich, Discriminator in erweiterten Klassen zu verwenden?

    
ReynierPM 25.09.2014, 22:38
quelle

1 Antwort

24

Die Antwort ist genau dort in der Nachricht warning !

Im Grunde sagt es Ihnen, dass Usuario so definiert ist, dass es zu Problemen kommen kann. In seiner aktuellen Form können Sie mit diesem Code eine Instanz von Usuario erstellen und damit arbeiten. Aber warte eine Sekunde. Das ist nicht in der Diskriminatorkarte definiert. Also, was passiert, wenn du versuchst, es durchzuhalten? Boom! ... oder zumindest wird es eine hässliche Ausnahme auslösen.

Nun, ich weiß, dass Sie wahrscheinlich nicht einmal daran gedacht haben, Usuario zu instanziieren. Es ist nur eine Basisklasse für Natural und Empresa , aber Doctrine weiß das nicht .

Also, wie können Sie das reparieren? Abhängig von Ihren Anforderungen gibt es zwei mögliche Szenarien:

Usuario sollte instanziierbar sein

Das heißt, Benutzer in Ihrer Anwendung können eine Instanz von Natural , Empresa oder einfach nur Usuario sein. Dies ist wahrscheinlich nicht der Fall, aber es könnte für einen zukünftigen Leser gelten.

Lösung: fügt Usuario zur Diskriminatorkarte hinzu. Dies wird es Ihren Benutzern ermöglichen, einer dieser drei Typen zu sein.

%Vor%

Usuario sollte nicht instanziierbar sein

Das heißt, Benutzer in Ihrer Anwendung können entweder eine Instanz von Natural oder Empresa sein, aber niemals Usuario .

Lösung: make Usuario und abstract class. Dies wird es unmöglich machen, dass es instanziiert wird.

%Vor%     
FyodorX 26.09.2014, 00:00
quelle

Tags und Links