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

Robert Wildling rowild at gmx.net
Mon Aug 12 16:12:46 CEST 2013


Hallo, lieber Christian,

Danke für deine Mithilfe!!!

Mit folgendem TypoScript klappt's:

lib.MENU_COUNTRIES = CONTENT
lib.MENU_COUNTRIES {
   table = tx_kofomi_domain_model_persons
   select {
     pidInList = 45
     selectFields = tx_kofomi_domain_model_persons.nationality, 
static_countries.uid, static_countries.cn_iso_2, 
static_countries.cn_short_de
     leftjoin = static_countries ON 
(tx_kofomi_domain_model_persons.nationality = static_countries.uid)
     where = tx_kofomi_domain_model_persons.nationality != 0
     groupBy = tx_kofomi_domain_model_persons.nationality
     orderBy = static_countries.cn_short_de
   }
   renderObj = COA
   renderObj {
     10 = TEXT
     10.dataWrap = <li><a href="#filter-nationality-{field:cn_iso_2}" 
data-filter-value=".{field:cn_iso_2}" 
title="{field:cn_short_de}">{field:cn_short_de} 
<small>({field:cn_iso_2})</small></a></li>
   }
}

Die pidInList war ein wichtiger Hinweis von dir, denn die muss für die 
Personen-Tabelle stimmen, nicht für die static_countries!

Meinerseits hab ich Blödsinn verzapft, als ich von m:m-Relation 
gesprochen habe. Die gibt es nicht, es ist nur ein Mehrfach-Auswahlfeld. 
Sorry!

Was bei mir Fehler macht, sind "AS"-Zuweisungen in sql-Statement, 
deswegen ist alles ausgeschrieben. Mir ist das Problem bewusst, vor 
allem im Zusammenhang mit dem "sorting"-Feld, wo dann schnell man ein 
Fehler geworfen wird. Aber das Ansprechen von Feldern mit 
Tabellen-"Vorsilbe" innerhalb des renderObj funktioniert bei mir nicht - 
sollte das deiner Meinung nach gehen?

Also zB:
{field:stytic_countries.cn_short_de}
vs
{field:cn_short_de}

im renderObj-Abschnitt.
Öder könnte das ein bug sein???

Und zu letzt zu Extbase:
Wenn das mit dem m:m jetzt wegfällt und nur einfach auf die static-info 
zugegriffen werden soll, ist die dann ein Weg bekannt?

Danke nochmals!
Gruß, Robert


> 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