Aktuell entwickeln wir eine sehr flexible und modulare Anwendung mit Zend Framework 2 und Doctrine 2. In dieser Anwendung gibt es mehrere Doctrine Entitäten, sagen wir zum Beispiel die Entität Product
im Modul Products
. Dieses Modul Products
ist das Basis-/Standardmodul für das Produktmanagement.Lehre Vererbung ersatz
Wir möchten in der Lage sein, ein benutzerdefiniertes Products
Modul für einen Kunden (XProducts
) zu erstellen. Daher habe ich eine neue Entität erstellt, XProduct
(mit einigen zusätzlichen Feldern), die Product
erweitert. Wenn das benutzerdefinierte Modul aktiviert ist, möchte ich XProduct
und sonst Product
verwenden, aber nie zusammen (im selben Projekt).
Wenn ich beide Entitäten mit @Entity annotieren funktioniert es teilweise; zum Beispiel findAll
funktioniert perfekt, aber find
funktioniert nicht: die erstellte SELECT-Anweisung enthält die richtigen Spalten, aber die WHERE-Klausel ist falsch. Zum Beispiel:
SELECT t1.id AS id2, t1.name AS name3 FROM products t1 WHERE t0.id = ?
denke, ich t1
steht für ProductX
und t0
für Product
aber ich kann nicht herausfinden, warum die Spalten korrekt sind (t1
), aber die where-Klausel nicht (t0
) ist.
Ich bin mir bewusst, dass Doctrine bietet Single Table Vererbung Vererbung zu erreichen, aber deshalb ist es notwendig, eine DiskriminatorColumn und die DiscriminatorMap auf der Basis/Standard-Entität zu definieren. Dies passt nicht zu uns, da wir unser Basis-/Standardmodul ändern müssen, wenn wir ein neues benutzerdefiniertes Modul für einen Kunden hinzufügen (und das ist nicht das, was wir wollen ...).
Hat jemand einen Hinweis auf die Behebung dieses Problems? Vielen Dank!
Ich versuche den gleichen Ansatz, aber das Problem ist, dass die abstrakte Entity-Klasse (AbstractProduct) nicht in DQL-Abfragen verwendet werden kann. Laut dem [Handbuch] (http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html) sind zugeordnete Superklassen nicht abfragbar. Wie schreiben Sie Abfragen, die sowohl für Product als auch für XProduct funktionieren? – aimfeld