verfolgen Ich habe zwei Modelle mit einer einfachen 1-n-Beziehung (Kategorie und Artikel mit category_id). Ich würde gerne zeigen, wie viele Artikel es in der Kategorie gibt. Ich hätte gerne die Zahl zwischengespeichert, anstatt immer die Zählung durchzuführen, also habe ich ein zusätzliches Feld in der Kategorietabelle "total_items_count". Wie man diese Total-Count-Auslösung am besten macht, wenn man die Funktion "countUpdate" aufruft, da sich die Beziehung von mehreren Stellen (Backend, API, Frontend ...) ändern kann.Wie Änderungen der Beziehung zwischen zwei Modellen in yii2
Mein ursprünglicher Plan war, das AFTER_UPDATE-Ereignis zu verwenden, aber "link()" muss aufgerufen werden, nachdem das Element in der Datenbank gespeichert wurde (wenn mindestens ein neues Element hinzugefügt wird), dann weiß ich nicht, welcher Kategorie das Element zugeordnet ist . Ich muss auch die alte Kategorie kennen, falls der Gegenstand von einer Kategorie in eine andere geht. Im Backend-Controller verwende ich $ item-> link ('category', $ categoryObj); wie ich diese Beziehung irgendwann zu n-n ändern könnte.
Gibt es Ratschläge, wie Sie die vollständige Kontrolle über die Änderung der Verknüpfung zwischen Artikel und Kategorie erhalten und dann die Anzahl der alten und neuen verknüpften Kategorien aktualisieren? Danke
Danke, ich werde es diese Woche testen. Wird save() nur aufgerufen, wenn das Element aktualisiert wird (oder sowohl beim Aktualisieren als auch beim Erstellen des Elements)? – Dakipro
save() wird in beiden Fällen aufgerufen. So können Sie prüfen, ob Sie einen Artikel erstellen oder aktualisieren. Wenn Sie einen Artikel aktualisieren, ist es nicht erforderlich, den Wert total_items_count zu aktualisieren. Sie können auch die afterSave-Methode verwenden, die einen $ insert-Parameter hat, der "true" ist, wenn das Element erstellt wird. Vergiss nicht, danach parent :: afterSave() aufzurufen! –
danke, ich komme jetzt näher.Die Sache ist, dass ich nicht feststellen kann, ob die Kategorie geändert wird, weil ich das Item-Modell speichern und dann "verknüpfen" muss. '$ model = $ this-> findModel ($ id); if ($ model-> load (Yii :: $ app-> Anfrage-> Post())) { $ model-> save(); // und dann verknüpfen Sie es $ Modell-> Link ('Kategorie', $ KategorieObj); ' und save() wird dann zweimal aufgerufen, und in beiden Fällen weiß ich nicht, ob" category "geändert wird ($ this-> isAttributeChanged ('category') gibt immer false zurück) – Dakipro