cakePHP - wie bekomme ich die Artikel für ein verwandtes Modell?

7

Die Modelle sind: stores und product , und sie sind verknüpft mit:

%Vor%

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?

    
yossi 17.11.2011, 20:39
quelle

5 Antworten

16

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

hinzu

Fügen Sie in Ihrem Product -Modell Ihrer Assoziation die Option counterCache hinzu:

%Vor%

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.

    
Doug Owings 17.11.2011, 23:18
quelle
3

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.

%Vor%     
Ben Graham 17.11.2011 22:30
quelle
2

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:

%Vor%     
MarZab 02.06.2013 10:35
quelle
2

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.

    
Jason McCreary 17.11.2011 21:36
quelle
1

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:

  1. Sie möchten die Anzahl der Produkte in jedem Geschäft angeben, nicht die Gesamtzahl der Produkte.
  2. Sie sind nicht zu sehr mit der Leistung beschäftigt. Wenn Sie mehr als 50.000 Datensätze haben, sollten Sie vielleicht überlegen, ob Sie dies zurückstellen möchten, aber es wird erheblich komplizierter.
Tom Rose 17.11.2011 21:32
quelle