Ich versuche, Discriminator
in einer Entität zu verwenden, die sich von einer anderen aus erstreckt. Dies ist der Code, den ich gemacht habe:
Aber ich bekomme diesen Fehler, während ich den Befehl doctrine:schema:validate
:
[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?
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.
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.