[TYPO3-german] Extbase -> verschachtelte m:m-Abfrage im Repository fomulieren?

Eike Starkmann starkmann at undkonsorten.com
Fri Aug 2 12:45:49 CEST 2013


Hallo Robert,

Ok verstehe.

Da gibt es mehrere Möglichkeiten, so spontan fallen mir 3. ein:

1. Eigenes SQL Schreiben via statemant:
$query->statement('JOINS über 2 Tabellen')
Hat allerdings den Nachteil, das du nicht mehr FLOW kompatibel bist.

2. Du lässt dir das Ergebnis im Repository als Array zurück geben:
$query->getQuerySettings()->setReturnRawQueryResult( TRUE );
Dann kannst du im Repository alle Sortierungen/Gruppierungen mit PHP
vornehmen. Danach am besten wieder zu Objekten machen.

3. Eine Funktion im Reopository bauen:

PSEUDO:
findAllUAByKonzerts(\TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Kofomi\Domain\Model\Concerts>
Konzerts){
}


Diese liefert zu einer menge an Konzerten alle UAs
Dies wird im Controller dann so aufgerufen:
PSEUDO:
foreach ($concerts findAllConcerts() as $concert){
	$ua[]=findAllUAByKonzerts($event->getConcerts());
	//Doppelte rauschmeissen nicht vergessen.
}


Von Haus aus glaube ich kann Extbase das nicht.


Bis denne, Eike




Am 01.08.2013 22:43, schrieb Robert Wildling:
> Hallo, Eike,
> 
> Danke für deine Antwort!
> 
> So, wie du es beschreibst, funktioniert es auch ganz wunderbar. Diese
> Art von Ausgabe setze ich auch derzeit ein, sie hat nur den "Nachteil",
> dass die UA immer unter dem jeweiligen Konzert ausgegeben werden:
> 
> - Event
> -- Konzert 1
> --- UA 1
> --- UA 2
> -- Konzert 2
> --- UA 3 (oder eigentlich wieder 1)
> --- UA 4 (...ditto...)
> [etc]
> 
> Ich will aber die UA *aller* Konzerte zusammenfassen und als eigenen
> Punkt unter Events ausgeben (als etwas Spezielles dieses Events sozusagen):
> 
> - Event
> -- Alle UAs dieses Events (4):
> --- UA 1
> --- UA 2
> --- UA 3
> --- UA 4
> -- Konzert 1
> -- Konzert 2
> 
> Und gezählt sollten sie auch nocht werden! :-)
> 
> Sorry, das hab ich beim ersten Post so nicht erwähnt!
> 
> Ich könnte (und hab auch schon) natürlich unter Events ein Feld UA
> anlegen und dort die UA-Werke separat zuteilen. Das hat dann aber zur
> Folge, dass
> 1. Redundanz anfällt, denn bei den Konzerten müssen diese UAs auch
> angegeben werden
> 2. eine gewissen Fehleranfälligkeit eintreten kann, weil es keine
> Kontrollstrukturen gibt, die checken, ob die UAs dieses Events auch alle
> in den Konzerten vorhanden sind.
> 
> Bedingt geht das mit Fluid, aber es scheint mir jene Art von zuviel
> Programmierlogik zu sein, wo man dann sagt, das sollte eher in einem
> Repository abgehandelt werden...
> 
> Oder fällt dir dazu etwas ein?
> 
> Danke nochmals!
> Grüße und schönen Abend!
> Robert
> 
> 
>> Hi,
>> warum willst Du das überhaupt so machen?
>>
>> Ich verstehe das so:
>> Event<-M:M->Konzerte<-M:M->Werke
>>
>> In Fluid kannst du dich dich einfach über diese Relationen bewegen:
>> Event.Konzerte.Werke.
>>
>> Gut ok da es alles MM verknüfpungen sind muss du natürlich schleifen
>> bauen
>>
>> Pseudo:
>>
>> foreach Events as Event
>>     forach Event.Konzerte as Konzert
>>         foreach Konzert.Werke as Werk
>>             {Wker}
>>         done
>>     done
>> done
>>
>> Oder verstehe ich nicht was Du willst.
>>
>>
>> Bis denne, Eike
>>
>>
>> On 01.08.2013 10:42, Robert Wildling wrote:
>>> Hi, Extbase-Spezis,
>>>
>>> Kann mir jemand bitte einen Tipp bei folgendem Problem geben?
>>> Wieder mal eine Event-Extension...
>>>
>>> Ein Event kann mehere Konzerte haben, und jedes dieser Konzerte kann
>>> Werke am Programm haben, die Uraufführungen sind - diese gilt es, von
>>> "Event" aus zu finden und als kleine Liste darzustellen - und zwar auf
>>> allen möglichen Konzerten.
>>>
>>> Event, Konzerte und Werke sind alles eigene vollständige Objekte, die
>>> über m:m Relationen miteinander verknüpft werden.
>>>
>>> in Event gibt es dazu ein Listenfeld "concerts", das per Klick gefüllt
>>> wird, und in Konzerte wiederum gibt es ein Feld "Premieres", das per
>>> klick Werke einfügt.
>>>
>>> Die erste m:m-Relation wird ja von Extbase selbst ganz fein gehandelt,
>>> aber wie geht man die nächste Ebene an m:m-Relation an?
>>>
>>> Derzeit versuche ich mich an diesem da, komm aber nicht weiter, weil ich
>>> nicht weiß, wie ich die "Premieres" ins Spiel bringen soll:
>>>
>>>
>>> /**
>>>       * Find all concerts and within them all premieres. Group them in a
>>> list (alphabetically?)
>>>       *
>>>       * @param
>>> \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Kofomi\Domain\Model\EventGroups>
>>>
>>> $eventGroup
>>>       * // ist das der richtige return Type???
>>>       * @return
>>> \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Rowild\Kofomi\Domain\Model\Concerts>
>>>
>>> $premieres
>>>       */
>>>      public function findConcertPremieres($eventGroup) {
>>>          $query = $this->createQuery();
>>>          // Muss da irgendwo ein "groupBy" sein...???
>>>          $query->matching(
>>>              $query->logicalAnd(
>>>                  $query->contains('eventGroup', $eventGroup),
>>>                  $query->matching(
>>>                      $query->greaterThan('premieres', 0); // <= geht
>>> das??? weil m:m?
>>>                  )
>>>              );
>>>          );
>>>          // wie nach dem Titel der Werke, die UAs sind, ordnen?
>>>          $query->setOrderings(
>>>              array (
>>>                  'premieres.title' =>
>>> \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
>>>              )
>>>          );
>>>          return $query->execute();
>>>      }
>>>
>>> (Es gibt übrigens mehrere Event-Typen, deswegen die eventGroup...)
>>>
>>> Das nächste Problem ist: ich kann den Code nicht auf seine
>>> Funktionalität prüfen, weil ich nicht weiß, wie ich diese Spezielle
>>> Abfrage aus Fluid aufrufe...
>>>
>>> Ich bitte um Hilfe - danke!
>>> Schöne Grüße,
>>> Robert
>>>
>>>
>>> _______________________________________________
>>> TYPO3-german mailing list
>>> TYPO3-german at lists.typo3.org
>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>>
>>
> 
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german



More information about the TYPO3-german mailing list