Один из способов - использовать встроенную в Cake опцию counterCache
в вашей ассоциации.Это, вероятно, наиболее эффективный вариант, хотя он требует добавления поля в таблицу.
В вашей таблице stores
добавьте поле INT
с именем product_count
.Product
модель добавляет опцию counterCache
к вашей ассоциации:
var $belongsTo = array(
'Store' => array(
'className' => 'Store',
'foreignKey' => 'store_id',
'counterCache' => true
));
Когда вы добавляете или удаляете записи Product
, она автоматически обновляет поле product_count
связанной записи Store
,так что нет необходимости изменять ваши операции find
.
Обратите внимание, что если вы выберете этот маршрут, вам нужно будет вручную обновить поле product_count
, чтобы начальное значение было правильным, поскольку оно толькообновляет после операций добавления / удаления.