Ersetzung von Doctrine Inheritance
Derzeit entwickeln wir eine sehr flexible und modulare Anwendung mit Zend Framework 2 und Doctrine 2. In dieser Anwendung gibt es mehrere Doctrine-Entitäten, zum Beispiel die EntitätProduct
im ModulProducts
. Dieses ModulProducts
ist das Basis- / Standardmodul für das Produktmanagement.
Wir möchten in der Lage sein, eine benutzerdefinierte zu erstellenProducts
Modul für einen Kunden (XProducts
). Deshalb habe ich eine neue Entität erstellt,XProduct
(mit einigen zusätzlichen Feldern) die erweitertProduct
.
Also, wenn das benutzerdefinierte Modul aktiviert ist, möchte ich verwendenXProduct
und sonstProduct
, aber niemals zusammen (im selben Projekt).
Wenn ich beide Entities mit @Entity annotiere, funktioniert es teilweise. zum BeispielfindAll
funktioniert einwandfrei, aberfind
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 = ?
ich vermutet1
steht fürProductX
undt0
zumProduct
aber ich kann nicht herausfinden, warum die Spalten korrekt sind (t1
) aber die where-Klausel ist nicht (t0
).
Ich bin mir bewusst, dass Doctrine Single Table Inheritance bereitstellt, um eine Vererbung zu erreichen. Daher ist es erforderlich, eine DiscriminatorColumn zu haben und die DiscriminatorMap in der Basis- / Standardentität zu definieren. Dies passt nicht für 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 eine Ahnung, wie man dieses Problem behebt? Vielen Dank!