让我们假设以下情况:
B中的总数量累计A中所有相关个人记录的所有单独数量。
我有ModelC / edit,用户可以添加/删除/修改A。
每次附加,修改或删除A中的记录时,我都想更新B.total_quantity。
基本上,我有3种可能进行更新:
我的第一个选择是解决方案2,但我发现了它的问题,所以我需要帮助。
在ModelA.AfterSave中,我只有新的,修改过的数据。我怎么知道A.quantity是否已被更改?没有$ this-> old ['ModelA']或类似的东西。即使我知道这些信息,我也无法访问ModelB,因为没有$ this-> data ['ModelB'] ......
有人可以帮忙吗?
答案 0 :(得分:1)
你可以研究CakePHP 2.x的AggregateCache行为,这里有一个应该放在模型B中的小片段:
public $actsAs = array(
'AggregateCache'=>array(
array('field'=>'quantity','model'=>'A', 'sum'=>'total_quantity','recursive'=>-1),
)
);
更新:完整代码现已可用@Github: https://github.com/cwbit/cakephp-aggregate-cache
Vincent Lizzi在这里提出了代码:http://bakery.cakephp.org/articles/vincentm8/2010/08/23/aggregatecache-behavior