2013-05-26 129 views
0

关联模型之间的CakePHP更新让我们假设以下情况:在通过触发器

  • 甲属于关联B,C
  • 乙的hasMany甲
  • Ç的hasMany甲
  • A具有场量
  • 乙有字段total_quantity

总数B总和所有指标在A.

的所有相关的个人记录维杜阿尔批量我ModelC /编辑,用户可以添加/删除/修改A.

我要当一个记录被追加每次更新B.total_quantity,修改或删除。

基本上,我有3种可能性做了更新:​​使用触发器手动

  1. 在ModelCController
  2. 在ModelA.AfterSave
  3. 数据库

我的第一选择是解决方案2,但我发现它有问题,所以我需要帮助。

在ModelA.AfterSave中,我只有新的修改过的数据。我怎么知道A.quantity是否被改变了?没有$ this-> old ['ModelA']或类似的东西。即使我可以知道这些信息,我也无法访问ModelB,因为没有$ this-> data ['ModelB'] ...

任何人都可以提供帮助吗?

+0

您是否听说过CakePHP模型的counterCache功能?请参阅http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html –

+0

@JustinT。 counterCache不会总和字段 – Dave

回答

1

你可以学习的CakePHP的2.x的AggregateCache行为,这里是一个小片段,应该坐在你的模型B:

public $actsAs = array(
    'AggregateCache'=>array(
     array('field'=>'quantity','model'=>'A', 'sum'=>'total_quantity','recursive'=>-1), 
    ) 
); 

UPDATE:全码现已@Github: https://github.com/cwbit/cakephp-aggregate-cache

Vincent Lizzi在此处提供代码:http://bakery.cakephp.org/articles/vincentm8/2010/08/23/aggregatecache-behavior

+0

感谢您的建议。我现在正在研究这个伟大的行为,看起来它会适合我的需要。 –

+0

@ZoranKalinić:不客气,如果有用,对别人有帮助,并将其标记为正确答案 –