Hallo zusammen,
ich bin gerade daran meine ListView zu erstellen und nun benötige ich GroupBy. Ich habe gesehen das Fluid GroupBy kann, nur ich benötige dies schon auf Datenebene.
Beispiel:
Auto -> Name: "Hallo", JOIN -> Farbe: "Grün", JOIN ->Bewertung: "5"
Auto -> Name: "Hallo", JOIN -> Farbe: "Gelb", JOIN ->Bewertung: "4"
Auto -> Name: "Hallo", JOIN -> Farbe: "Blau", JOIN ->Bewertung: "2"
Ich habe also drei Datensätze mit dem gleichen Auto Namen. Für jedes der Datensätze gibt es mehrere Bewertungen. Nun möchte ich in der ListView die Auto-Datensätze vereinen. So dass mir ein Eintrag gezeigt wird, mit den jeweils 3 Farben sowie alle Bewertungen zusammengerechnet.
Ich habe nun die Fluid GroupBy Function misshandelt um mit <f:if condition="{iterator.isFirst}> nur der erste Auto Datensatz zu laden. Außerhalb der IF Anweisung werden die Farben aus jeweiligen Datensatz wiederholt. Nur bei der Bewertung hab eich das Problem dass ich diese zusammenrechnen muss um ein Durchschnitt zu bekommen.
Bei der Mittwald Doku habe ich gesehen das GroupBy so ohne weiteres in extbase Möglich sei und über SQL-Anweisungen gemacht werden. Ich möchte aber gerne in der extbase Welt bleiben, sonst hätte ich gleich bei meiner Pi-Extension bleiben können...
Wie wird dann eigentlich in Flow3 gearbeitet wenn dort keine SQL Anweisungen verwendet werden dürfen?!?
Wie würdest Ihr dies realisieren?
GROUP BY Probleme sind generell meist Sachen die man auf Domainebene lösen sollte. Ohne deine Aufgabenstellung und Domainmodels genau zu kennen kann ich aber nicht sagen ob und wie es besser ginge.
Da die Information die Du haben willst in keinem Model abgebildet wird kannst du gar nicht mit einer regulären Query zum Ziel kommen sondern musst "raw" SQL benutzen.
In Flow hat man die Möglichkeit Doctrines DQL zu benutzen. Das ist ein spezieller SQL Dialekt der trotzdem die Datenbankabstraktion und Object Mapping erlaubt.
Hallo kitsunet,
Dankeschön dass du dich immer so schnell meldest :-)
Ich möchte gerne diese SQL Abfrage in extbase abbilden:
SELECT tx_mautos_domain_model_auto.uid, name, (Sum( tx_mautos_domain_model_feuserrating.average ) / count( tx_mautos_domain_model_feuserrating.average )
) AS rating
FROM `tx_mautos_domain_model_auto`
INNER JOIN tx_mautos_domain_model_feuserrating ON tx_mautos_domain_model_auto.uid = tx_mautos_domain_model_feuserrating.auto
GROUP BY name
Eine Methode für die Berechnung der Durchschnitts-Bewertungen pro Auto ist vorhanden:
public function getRatingResult() {
$i = 0; //Zähler
$result = 0;
foreach($this->feuserrating as $ratings)
{
$i++;
$result += $ratings->getAverage() / count($ratings);
}
return round($result / $i, 0);
}
Extbase macht mich verrückt. Wieso schmeißt man diesen Käse in die Welt ohne Dokumentation und ohne solch eine wichtige Funktion? Und ich bin mir sicher, in 2 Tagen stehe ich vor dem nächsten Stein.
Nun kann ich langsam verstehen wieso es keine Doku, fast keine Tutorials oder Google Ergebnisse gibt. Extbase wird angepriesen als das "Neue", jeder sollte unbedingt auf diese "einfache" Weise entwickeln um zukunftsfähig zu sein!
Die Idee ist gut, aber wie bitte sehr soll ich unter Typo3 eine Flow3 kompatible Extension entwickeln, wenn es erst gar nicht Möglich ist? Zwangsläufig muss ich nun bei einem Wechsel auf Flow3 wieder komplett extbase anpassen... Das kann doch nicht der Sinn sein?
Nun entwickle ich seit geschlagenen 3 Monaten in Typo3 und fange jedes mal wieder von neuem an! Im Vergleich ist die dazu gehörige Android App innerhalb von 3 Monaten komplett auf eigenen Füßen gestanden und das mit viel weniger Zeitaufwand!
Könnte mir bitte jemand Auskunft geben wie ich am besten weiter machen soll? Die Motivation ist aktuell bei 0,001
Direkter Wechsel zu Neos ist wohl auch noch nicht das Gelbe vom Ei?