Die Modelle sind: stores
und product
, und sie sind verknüpft mit:
Ich möchte eine Liste aller Geschäfte und die Anzahl der Produkte erhalten, die sie haben. Wie sollte ich den Aufruf ändern: $this->Store->find('all', array(<..some conditions..>))
, um diesen Datentyp zurückzugeben?
Eine Methode besteht darin, die integrierte Option counterCache
in Ihrem Browser zu verwenden Verband. Dies ist wahrscheinlich die performanteste Option, erfordert jedoch das Hinzufügen eines Felds zu Ihrer Tabelle.
Fügen Sie in Ihrer Tabelle stores
ein INT
-Feld namens product_count
Fügen Sie in Ihrem Product
-Modell Ihrer Assoziation die Option counterCache
hinzu:
Immer wenn Sie Product
records hinzufügen oder löschen, wird das Feld product_count
des zugehörigen Store
Datensatzes automatisch aktualisiert, so dass Sie Ihre find
Operationen nicht ändern müssen.
Beachten Sie, dass Sie das Feld product_count
manuell aktualisieren müssen, damit der Anfangswert korrekt ist, da er nur nach dem Hinzufügen / Löschen aktualisiert wird.
Ich glaube, dass etwas wie das Folgende funktionieren würde, aber ich kann es von hier aus nicht testen. Der Inhalt von COUNT()
muss möglicherweise optimiert werden, um mit der Erstellung von Abfragen durch Cake zu arbeiten.
Nach CakePHP 2.0 können Sie auch Bedingungen hinzufügen Ihre Anzahl und mehrere Zähler pro Modell .
Fügen Sie Ihrem Store
ein ganzzahliges Feld hinzu und verwenden Sie dieses in Ihrem Product
-Modell:
Schau dir find('count')
an.
Dies wird jedoch möglicherweise nicht gut skaliert, wenn Sie diese Daten mit Geschäftsdaten paaren (siehe die Antwort von therealtomrose ).
Ich hatte Probleme mit find('count')
und Gruppierungsdaten. Leider ist dies einer dieser Randfälle, bei denen Frameworks, die Abfragen für Sie schreiben, fehlschlagen.
Ein einfacher Fund: Alle Daten werden abgerufen:
%Vor%Die Anzahl der Produkte in einem der Stores kann mit dem folgenden Code zurückgegeben werden, wobei "0" durch die Nummer des Array-Index des Stores ersetzt werden kann:
%Vor%Wenn Sie die Anzahl der Produkte in jedem Geschäft festlegen möchten, können Sie Folgendes in Betracht ziehen:
%Vor%Annahmen, die ich mache:
Tags und Links count cakephp model-associations