У меня две модели с простым соотношением 1-n (категория и элемент с категорией_id). Я хотел бы показать, сколько предметов в этой категории. Я хотел бы, чтобы число кэшировалось, а затем всегда делало счет, поэтому у меня есть дополнительное поле в таблице категорий, называемой total_items_count. Как лучше всего запустить этот счетчик, когда вызвать функцию countUpdate, поскольку отношение может измениться из нескольких мест (backend, api, frontend ...).Как отслеживать изменения отношения между двумя моделями в yii2
Мой первоначальный план состоял в том, чтобы использовать событие AFTER_UPDATE, но «link()» необходимо вызывать после того, как элемент хранится в базе данных (при добавлении нового элемента как минимум), поэтому я не знаю, какая категория является элементом, связанным с , Мне также нужно знать старую категорию, в случае, если элемент переходит из одной категории в другую. В backend-контроллере я использую $ item-> link ('category', $ categoryObj); так как я могу изменить это отношение на n-n когда-нибудь.
Любые советы о том, как иметь полный контроль, если связь между товаром и категорией изменяется, а затем обновлять счет для старой и новой связанной категории? Спасибо
Спасибо, я проверил его на этой неделе. Будет ли save() вызываться только при обновлении элемента (или как при обновлении, так и при создании элемента)? – Dakipro
save() вызывается в обоих случаях. Таким образом, вы можете проверить, создаете ли вы или обновляете элемент. Если вы обновляете элемент, вам не понадобится обновлять total_items_count. Вы также можете использовать метод afterSave, который имеет параметр $ insert, который будет «true», если элемент создан. Не забывайте вызывать родительский :: afterSave() после этого! –
спасибо, я сейчас близко.Дело в том, что я не могу определить, изменилась ли категория, потому что мне нужно сохранить модель элемента, а затем «связать ее» следующим образом: '$ model = $ this-> findModel ($ id); if ($ model-> load (Yii :: $ app-> request-> post())) { $ model-> save(); // а затем ссылку на него $ model-> link ('category', $ categoryObj); ' и save() затем вызывается два раза, и в обоих случаях я не знаю, изменяется ли« категория »($ this-> isAttributeChanged ('category') всегда возвращает false) – Dakipro