[TYPO3-german] Re: Extbase und eigene SQL-Abfragen für m:m.related tables

Christian Hennecke ch at moon-agentur.de
Mon Aug 12 11:40:24 CEST 2013


Am 10.08.13 17:12, schrieb Robert Wildling:

Hallo Robert,

 > Folgende Situation (Extbase 6.1, TYPO3 CMS 6.1.3, php 5.4.10):
> Eine Tabelle "tx_kofomi_domain_model_persons" hat beim Feld
> "nationality" eine m:m-Relation zu static_info_tables. (Die Person kann
> mehrere Nationalitäten besitzen.) Am Kopf der Seite soll ein Menü gebaut
> werden, dass die Länder, die in Verwendung sind, als Dropdown-Liste
> anzeigt (bei Auswahl eines Landes greift dann ein Isotopes-Script und
> filtert die Anzeigt.)
>
> Ich will das mit TypoScript lösen, aber sobald ich ein leftjoin einbaue,
> funktioniert das nicht mehr. Das ist das Script:
>
>
> lib.MENU_COUNTRIES=CONTENT
> lib.MENU_COUNTRIES{
> table=tx_kofomi_domain_model_persons
> select{
> selectFields=tx_kofomi_domain_model_persons.nationality,static_countries.cn_short_de
> leftjoin=static_countriesON(tx_kofomi_domain_model_persons.nationality=static_countries.uid)
> #where = static_countries.deleted=0 AND static_countries.hidden=0 AND
> tx_kofomi_domain_model_persons.deleted = 0 AND
> tx_kofomi_domain_model_persons.hidden=0
> groupBy=tx_kofomi_domain_model_persons.nationality
> pidInList = 0
> #orderBy = cn_short_de
> }
> renderObj=COA
> renderObj{
> 10=TEXT
> 10.dataWrap=<li>{field:static_countries.cn_short_de}</li>
> }
> }

[schnipp]

> Kann mir jemand erklären, warum das mit TS nicht geht? Ich weiß, dass
> TS-select-Abfragen nicht funktionieren, wenn kein pidInList angegeben
> wird, weswegen im angegebenen Abschnitt ein pidInlist angegeben wird...
> Auch stellt sich mir die Frage, wie im renderObj ein Feld angesprochen
> wird, wenn man mit m:m-Tabellen arbeitet - mit dem Tabellennamen vorm
> Feld? Dazu finde ich absolut gar keine Dokumentation und auch keine
> Beispiele. (Das renderObj zu Debug-Zwecken einfach nur mit einem
> value=Test zu ersetzen, erzeigt übrigens auch keine Ausgabe...)

Das bei Verwendung von value=Test nichts ausgegeben wird, sagt uns schon 
mal, daß die Abfrage kein Ergebnis liefert. Mit pidInList = 0 bekommst 
du natürlich nur Datensätze zurück, wenn auch die Einträge für 
tx_kofomi_domain_model_persons auf der Seite mit der ID 0 liegen.

Insgesamt wundere ich mich etwas über die verwendeten Tabellen. In 
tx_kofomi_domain_model_persons stehen die Personen und in 
static_countries die Länder. Dann fehlt hier für eine n:m-Situation aber 
die Verknüpfungstabelle, oder steh ich gerade auf dem Schlauch?

Die Felder sprichst du normal über ihre Namen an. Problematisch wird 
das, wenn Feldnamen doppelt vorkommen, weil dann nur das Feld einer der 
Tabellen zugänglich ist. In solchen Fällen sollte die Verwendung von AS 
im Parameter selectFields helfen. Im vorliegenden Fall sollte aber 
folgendes gehen:

10.dataWrap = <li>{field:cn_short_de}</li>

> Und schließlich: Kann man dieses Problem auch mit Extbase selbst lösen?
> Sprich: ist es möglich, im Controller "Person" in der listAction eine
> Funktion einzubauen, die dieses Ländermenü bastelt? Meine Versuche, im
> Repository bzw. im Controller eine Funktion zu bauen, die auf eine
> Tabelle und deren Inhalt außerhalb des eigenen Objekts zuzugreifen
> versucht, sind bislang gescheitert. Und TYPO3 v4
> $GLOBALS[''].exec_SELECTquery ... möchte ich (noch) nicht verwenden,
> weil es darum geht, Extbase und TYPO3 6.1 zu lernen.

Bei Extbase und n:m schnalle ich derzeit auch noch ab. :-(

Gruß
Christian


More information about the TYPO3-german mailing list