Zum Inhalt springen

MM Tabelle mit Relationen zu unterschiedlichen Tabellen

Erstellt am 24. Mai 2011 · Noch keine Antworten

Tags: TCA, Frage

drauscher ·

Hallo Gemeinde

In meiner Extbase Extension habe ich eine Flashanwendung eingebettet in der man verschiedene Objekte hin und herschieben kann. FEuser die diese Anwendung nutzen, können den Zustand ihrer verschobenen Objekte speichern um sie bei erneuten einloggen wieder herstellen zu können.

Die Objekte werden im Typo3 BE angelegt und dann in Flash geladen.

Ich habe verschiedene Objekte in meiner Extension angelegt:

Objekte die im Flashfilm positioniert werden können:Tx_MyExt_Domain_Model_Auto
Tx_MyExt_Domain_Model_Haus
Tx_MyExt_Domain_Model_Person

Dieses Objekt ist ein Container der eine Referenz auf ein Objekt (z.B.Auto) aufnimmt und Eigenschaften wie pos_X, pos_Y speichert:Tx_MyExt_Domain_Model_Flasheigenschaft

Dieses Objekt nimmt nur Objekte vom Typ Tx_MyExt_Domain_Model_Flasheigenschaft auf:Tx_MyExt_Domain_Model_Zustandscontainer

Die Objekte sind über m:m Relationen verbunden, was auch funktioniert.
Lege ich ein Objekt Tx_MyExt_Domain_Model_Flasheigenschaft im Backend an, kann ich ihm entweder ein Auto, Haus oder Person zuweisen. Dies wird richtig abgespeichert und auch in der m:m Tabelle wird, in der Spalte 'tablenames' der richtige Name der Tabelle hinterlegt.

Hier meine TCA für Tx_MyExt_Domain_Model_Flasheigenschaft:

'type' => 'group',
    'internal_type' => 'db',
        'allowed' => 'tx_myext_domain_model_auto,tx_myext_domain_model_haus,tx_myext_domain_model_person',
    'MM' => 'tx_myext_flasheigenschaft_item_mm',
 
    'prepend_tname' => 1,
    'size' => 1,
    'minitems' => 1,
    'maxitems' => 1,

Wie man sieht sind in 'allowed' die 3 Tabellen der möglichen Objekte eingetragen.

Wenn ich mir nun über eine Abfrage im Zustandcontainer - Controller alle Zustände ausgeben lassen möchte, werden die LEFT JOIN Befehle der SQL Anweisungen falsch generiert.

SELECT .* FROM tx_myext_flasheigenschaft_item_mm LEFT JOIN ON tx_myext_flasheigenschaft_item_mm.uid_foreign = .uid WHERE tx_myext_flasheigenschaft_item_mm.uid_local = '5' ORDER BY tx_myext_flasheigenschaft_item_mm.sorting ASC

Der LEFT JOIN weiss nicht auf welche Tabelle er verweisen soll da ihm die Angabe 'foreign_table' im TCA fehlt. Trage ich dort eine Bezugstabelle ein, zB. tx_myext_domain_model_auto, wird die Abfrage richtig erstellt. Allerdings sind dann alle verknüpften Objekte vom Typ Auto und nicht vom Typ der auch in der m:m Tabelle in der Spalte 'tablenames' eingetragen ist.

Bild: itb-institut.de/Unbenannt.GIF

Was ich erreichen möchte:
Beim Aufruf von findAll() im Tx_MyExt_Domain_Repository_ZustandscontainerRepository soll mir Extbase alle Objekte und deren Unterobjekte zurückliefern und dabei die unterschiedlichen Objekttypen, wie sie in der Spalte tablenames der m:m Tabelle hinterlegt sind, berücksichtigen.

Ich hoffe ich hab mein Problem verständlich rübergebracht

Schöne Grüße, Dirk