[Frage] Datenbank-Relationen Extensionbuilder [Gelöst] TYPO3-Version: 6.1.1

  • HH HH
    Jedi-Meister
    0 x
    351 Beiträge
    0 Hilfreiche Beiträge
    11. 12. 2013, 21:14

    Hallo,
    vielleicht eine blöde Frage,
    Ich würde gerne eine Extension schreiben bzw. die Extension mit dem ExtensionBuilder starten.

    Dabei will ich Meldungen eingeben (es gibt also eine Tabelle Meldungen), diese Meldungen können einem bestimmten Landkreis (Landlreis Tabelle) zugeordnet werden und einer bestimmten Stadt aus dem Landkreis (Stadttabelle).

    So jetzt die Frage:
    Wie muss ich die Tabellen verknüpfen, dass ich lege ich eine neue Meldung an den Lanskreis auswählen kann, und dann anschließende die Stadt. Allerdings sollen mir dann auch nur Städte des gewählten Landkreises angezeigt werden.

    Geht sowas?
    Danke!
    Harald

  • HH HH
    Jedi-Meister
    0 x
    351 Beiträge
    0 Hilfreiche Beiträge
    12. 12. 2013, 12:36 - Lösung

    So ich habs hingekriegt. Ich werde es mal versuchen verständlich zu erklären (ich finde Erklärungen die mir immer nur ein Stichwort geben zwar besser als nichts, oft hätte ichs trotzdem gern ausführlicher).

    Ich habe eine Extension die mir eine Meldung zu einem Landkreis und dann zu einer Stadt zuordnen lassen soll (ich weiß kein gutes Beispiel :-))

    Es soll folgendes passieren: Wenn ich einen neuen Datensatz anlege gebe ich eine Meldunge ein, anschließend wähle ich einen Landkreis aus (select liste), in einer weiteren selectliste sollen mir nur die Städte des entsprechenden landkreises angeboten werden.

    Ich habe also eine Tabelle meldungen (tx_domain_model_meldungen). Dort gibt es einen Eintrag Landkreis und zu Stadt. (Die Meldungen sind einem Landkreis und einer Stadt zugeordnet)
    Dann gibt es eine Tabelle landkreis (tx_domain_model_landkreis). (Die
    Zuletzt gibt es eine Tabelle Stadt (tx_domain_model_stadt). Dort gibt es einen Eintrag Landkreis (klar die Städte sind den Lankreisen zugeordnet).

    Um nun bei der Dateneingabe nur die Städte des entsprechenden Landkreises angezeigt zu bekommen muss ich den TCA meiner Extension (meldungen.php) verändern.
    Und zwar innerhalb des 'colums' array den array 'stadte'.
    Dort wird bei mir auf die die foreign table stadte verwiesen
    [code]

    1. 'foreign_table' => 'tx_testrse_domain_model_stadte',
    2. 'foreign_table_where' => 'AND tx_testrse_domain_model_stadte.landkreis=(SELECT landkreis FROM tx_testrse_domain_model_meldungen WHERE uid=###THIS_UID###)',
    [/code]
    im Klartest, es sollen nur die landkreise aus der Tabelle Stadte ausgelesen werden, deren landkreis dem landkreis in der meldungen Tabelle des aktuellen Eintrags übereinstimmt.

    So funktionierts wie ich's wollte.

    Schön wäre noch wenn beim Anlegen eines Datensatzes im Backend die Seite automatisch gespeichert wird, dass die selectliste automatisch aktualisiert wird....

    Vielleicht hilft es jemandem!

  • Hilfreichster Beitrag

  • Schweriner Schwerine...
    Jedi-Ratsmitglied
    1 x
    554 Beiträge
    60 Hilfreiche Beiträge
    11. 12. 2013, 22:08 - Hilfreichster Beitrag

    Also das mit den Städten ist später eine Sache die man im TCA irgendwie regeln muss, dass da nochmal gefiltert wird. Die Relation ist tatsächlich etwas Tricky... hab gerade kein TYPO3 System vor meinen Augen (erst morgen früh wieder), aber wenn man im Extension Builder ein Model (Stadt) bei mehreren anderen Models als Relation hinzufügen kann, behaupte ich Stadt ist sowohl mit dem Landkreis als auch mit der Meldung verbunden und die Meldung auch nochmal mit dem Landkreis.

    Könnte zwar funktionieren, aber ich halte es trotzdem irgendwie datenbanktechnisch für Schwachsinn. Eigentlich würde es ja reichen wenn die Meldung mit der Stadt verbunden ist, welche wiederrum zu einem Landkreis gehört. So kannst Du bei der Ausgabe später über die Stadt herausfinden zu welchem Landkreis sie gehört.
    Damit sind wir dann auch wieder beim TCA, denn da sollte der Landkreis eigentlich nur zum Filtern der Städte auswählbar sein, aber eine Relation ist nicht zwingend erforderlich, oder?


  • 1
  • Schweriner Schwerine...
    Jedi-Ratsmitglied
    1 x
    554 Beiträge
    60 Hilfreiche Beiträge
    11. 12. 2013, 22:08

    Also das mit den Städten ist später eine Sache die man im TCA irgendwie regeln muss, dass da nochmal gefiltert wird. Die Relation ist tatsächlich etwas Tricky... hab gerade kein TYPO3 System vor meinen Augen (erst morgen früh wieder), aber wenn man im Extension Builder ein Model (Stadt) bei mehreren anderen Models als Relation hinzufügen kann, behaupte ich Stadt ist sowohl mit dem Landkreis als auch mit der Meldung verbunden und die Meldung auch nochmal mit dem Landkreis.

    Könnte zwar funktionieren, aber ich halte es trotzdem irgendwie datenbanktechnisch für Schwachsinn. Eigentlich würde es ja reichen wenn die Meldung mit der Stadt verbunden ist, welche wiederrum zu einem Landkreis gehört. So kannst Du bei der Ausgabe später über die Stadt herausfinden zu welchem Landkreis sie gehört.
    Damit sind wir dann auch wieder beim TCA, denn da sollte der Landkreis eigentlich nur zum Filtern der Städte auswählbar sein, aber eine Relation ist nicht zwingend erforderlich, oder?

  • HH HH
    Jedi-Meister
    0 x
    351 Beiträge
    0 Hilfreiche Beiträge
    12. 12. 2013, 10:15

    Danke für die Antwort,
    vollkommen richtig, die Stadt kann dem Kreis zugeordnet werden.
    Das ganze sollte auch nur als Bsp. dienen, die tatsächliche Datenbank, braucht Kreise, Raumschaften Meldungen, damit kann allerdings kein Mensch was anfangen.

    Vielleicht wäre das Bsp. besser. Ich möchte Anzeigen schalten die einer Rubrik zuordnen und anschließend einer speziellen Auswahl von Unterrubriken.

    Ich denke ich bin der Sache einen Schritt näher gekommen.
    Und zwar habe ich im TCA (wie du schon gesagt hattest) im config array 'foreign_table_where' =>
    definiert. Da kann ich dann tatsächlich filtern.
    Das muss ich jetzt noch verfeinern, aber ich denke so sollte es klappen.

    Danke nochmals für deine Antwort!

  • HH HH
    Jedi-Meister
    0 x
    351 Beiträge
    0 Hilfreiche Beiträge
    12. 12. 2013, 12:36

    So ich habs hingekriegt. Ich werde es mal versuchen verständlich zu erklären (ich finde Erklärungen die mir immer nur ein Stichwort geben zwar besser als nichts, oft hätte ichs trotzdem gern ausführlicher).

    Ich habe eine Extension die mir eine Meldung zu einem Landkreis und dann zu einer Stadt zuordnen lassen soll (ich weiß kein gutes Beispiel :-))

    Es soll folgendes passieren: Wenn ich einen neuen Datensatz anlege gebe ich eine Meldunge ein, anschließend wähle ich einen Landkreis aus (select liste), in einer weiteren selectliste sollen mir nur die Städte des entsprechenden landkreises angeboten werden.

    Ich habe also eine Tabelle meldungen (tx_domain_model_meldungen). Dort gibt es einen Eintrag Landkreis und zu Stadt. (Die Meldungen sind einem Landkreis und einer Stadt zugeordnet)
    Dann gibt es eine Tabelle landkreis (tx_domain_model_landkreis). (Die
    Zuletzt gibt es eine Tabelle Stadt (tx_domain_model_stadt). Dort gibt es einen Eintrag Landkreis (klar die Städte sind den Lankreisen zugeordnet).

    Um nun bei der Dateneingabe nur die Städte des entsprechenden Landkreises angezeigt zu bekommen muss ich den TCA meiner Extension (meldungen.php) verändern.
    Und zwar innerhalb des 'colums' array den array 'stadte'.
    Dort wird bei mir auf die die foreign table stadte verwiesen
    [code]

    1. 'foreign_table' => 'tx_testrse_domain_model_stadte',
    2. 'foreign_table_where' => 'AND tx_testrse_domain_model_stadte.landkreis=(SELECT landkreis FROM tx_testrse_domain_model_meldungen WHERE uid=###THIS_UID###)',
    [/code]
    im Klartest, es sollen nur die landkreise aus der Tabelle Stadte ausgelesen werden, deren landkreis dem landkreis in der meldungen Tabelle des aktuellen Eintrags übereinstimmt.

    So funktionierts wie ich's wollte.

    Schön wäre noch wenn beim Anlegen eines Datensatzes im Backend die Seite automatisch gespeichert wird, dass die selectliste automatisch aktualisiert wird....

    Vielleicht hilft es jemandem!

  • 1