EntityFieldQuery ist nicht zum Ausführen von Aggregatfunktionen (SUM, AVG usw.) für Felddaten vorgesehen, da es SQL-unabhängig ist. Das heißt, solche Operationen müssen von Zeit zu Zeit durchgeführt werden. Entsprechend der SQL-Funktion mit EntityFieldQuery und insbesondere EntityFieldQuery und der Verwendung der Aggregatfunktionen SUM, ARG und MAX müssen SQL-Abfragen verwendet werden, und dieser Ansatz passt am besten zu meinem Anwendungsfall. Ich habe gestern mit @chx gesprochen und er hat empfohlen, einige interne Funktionen zu verwenden, um den Feldnamen und den Spaltennamen zu finden. Ich frage mich nur, ob dies nachhaltig ist und ob es angebracht ist, dies in einer Codebasis zu tun, die ich möglicherweise für andere herausbringe.
Wenn es der beste Weg ist, dann ist es der beste Weg. Ich möchte es einfach nicht tun, bevor ich mir absolut sicher bin, weil es sich chaotisch anfühlt.
_field_sql_storage_tablename($field)
und_field_sql_storage_columnname($field_name, $column
) verwendet, die meinen aktuellen Anforderungen entsprechen, aber sie sind nicht nachhaltig. Deshalb bin ich immer noch an einer Antwort auf diese Frage interessiert, falls eine kommen sollte.Antworten:
Das Sichtfeld - Modul ermöglicht es Ihnen , Feld Tabellen Basistabellen Ansichten zu belichten. Dies unterscheidet sich vom Standardverhalten von Views darin, dass die Basistabelle die Feldtabelle und keine Entität ist, aus der die Felddaten dann geladen werden. Wenn Sie beispielsweise einen Knoten als Basistabelle auswählen, können Sie Felder hinzufügen, aber die primäre (Basistabelle) in der Abfrage ist immer noch ein Knoten, der abhängig von Ihren Daten die Aggregatfunktionen vermasseln kann (auch bekannt als eine Viele-zu-Eins-Beziehung von einigen) Felder zum Knoten).
Mit dem Feld Ansichten können Sie direkt auf die Feldtabellen zugreifen, sodass Aggregatfunktionen ordnungsgemäß funktionieren. Wenn Sie außerdem "interessante" Verknüpfungen mit anderen Feldtabellen ausführen müssen, können Sie diese mithilfe der folgenden Funktionen vollständig steuern.
Dies ist recht einfach zu verwenden und ermöglicht es Ihnen, Aggregatfunktionen über mehrere Feldtabellen gleichzeitig auszuführen. Sie können dann manuell eine Ansicht aufrufen
$view->execute()
und die Ergebnisse aus der Ansicht ziehen. Beispiele hierfür finden Sie in der View-Dokumentation.Der Vorteil dieses Ansatzes gegenüber EntityFieldQuery besteht darin, dass Sie den Prozess in Ansichten (die von fast allen bereits verwendet werden) verwalten und die Erstellung physischer Abfragen auf weniger direkte Weise durchführen können. Außerdem möchten Sie häufig solche aggregierten Daten auf einem Administratorbildschirm anzeigen, auf dem Sie in der Ansicht sowohl eine Anzeige bereitstellen als auch für zusätzliche Zwecke auf die Ergebnisse im Code zugreifen können.
quelle
Könnte dies in einem Zusatzmodul zu Views gemacht werden? Es verarbeitet Abfragen sehr gut und einige Ergebnisse werden mit Aggregatfunktionen veröffentlicht, z. B. in Aktionen, bei denen Kontextfilter fehlschlagen. Dabei können standardmäßig alle Werte verwendet und die jeweils verfügbaren Ergebnisse berücksichtigt werden. Die Funktionen für die Abfragen sollten vorhanden sein, es wird jedoch ein UI-Formular benötigt. Lassen Sie mich wissen, ob dies sinnvoll ist. Ich beginne gerade, Ansichten zu zerlegen und spekuliere.
quelle