2016-06-10 13 views
5

Ich versuche, einen Abfrageersteller mit ORM zu erstellen. Aber ich stolpere über ein Feld auf einer Entität mit einer Beziehung zu 2 möglichen Tabellen. Mit dieser Struktur wäre es (IMHO) unmöglich, sie in der Entität selbst abzubilden.Kann Doctrine DBAL mit ORM Query Builder gemischt werden?

╔═══════╗  ╔═══════╗  ╔═══════╗ 
║ ValB ║  ║ Main ║  ║ ValC ║ 
╠══╦════╣  ╠══╦════╣  ╠══╦════╣ 
║ *║ pk ║-- + ║ *║ pk ║ +---║ *║ pk ║ 
╠══╬════╣ | ╠══╬════╣ | ╠══╬════╣ 
║ ║ ║ +--║ ║v_id║---+ ║ ║ ║ 
╠══╬════╣  ╠══╬════╣  ╠══╬════╣ 
║ ║ ║  ║ ║ ║  ║ ║ ║ 
╚══╩════╝  ╚══╩════╝  ╚══╩════╝ 

ist möglich DBAL Querybuilder mit ORM Querybuilder oder jeder anderen Art und Weise zu mischen, die noch die ORM Querybuilder meist auf dem Code verwenden.

PS. Ich habe das db nicht entworfen und ich habe es nur optimiert. Keine Entschuldigung für diese :(

Antwort

5

es macht keinen Sinn, weil später ORM haben Ergebnisse auf Objekte abzubilden. Sie nicht beide ValB und ValC auf dem gleichen Grundstück in Main

es zu tun Karte korrekt sollte es für ValB und ValC Beziehungen. Auch separate Felder in Main Tabelle sein, wenn sie den gleichen Wert haben. Wie dies

╔═══════╗  ╔════════╗  ╔═══════╗ 
║ ValB ║  ║ Main ║  ║ ValC ║ 
╠══╦════╣  ╠══╦═════╣  ╠══╦════╣ 
║ *║ pk ║-- + ║ *║ pk ║ +---║ *║ pk ║ 
╠══╬════╣ | ╠══╬═════╣ | ╠══╬════╣ 
║ ║ ║ +--║ ║vB_id║ | ║ ║ ║ 
╠══╬════╣  ╠══╬═════╣ | ╠══╬════╣ 
║ ║ ║  ║ ║vC_id║---+ ║ ║ ║ 
╚══╩════╝  ╚══╩═════╝  ╚══╩════╝ 

Sie v_id Spalte kopieren könnte und dann die richtige Zuordnung in Lehre machen.

+0

Ja, ich bin mir dieser Lösung bewusst, aber gibt es einen Weg dafür, nicht auf die Erstellung einer anderen Tabelle zurückzugreifen? weil wir in Produktion sind und es sehr mühsam und gefährlich ist, in diese Struktur zu migrieren. – rrw

+1

Ich verstehe Ihr Problem. Aber nein. Sie werden wahrscheinlich nur hier bei DBAL bleiben müssen. –

+0

danke deine urkunde erleuchtet mich. Ich dachte nur, dass es vielleicht eine Möglichkeit gibt, die Entität dynamisch zuzuordnen. Aber ich denke, es gibt keinen Weg. Vielen Dank! :) – rrw