【问题标题】:In CakePHP updates between associated models through triggers在 CakePHP 中通过触发器在关联模型之间进行更新
【发布时间】:2013-05-26 17:22:12
【问题描述】:

让我们假设以下情况:

  • A 属于 B,C
  • B 有很多 A
  • C hasMany A
  • A 有字段数量
  • B 有字段 total_quantity

B 中的总数量将 A 中所有相关单个记录的所有单个数量相加。

我有 ModelC/edit,用户可以在其中添加/删除/修改 A。

每次追加、修改或删除 A 中的记录时,我都想更新 B.total_quantity。

基本上,我有 3 种可能进行更新:

  1. 在 ModelCController 中手动
  2. 在 ModelA.AfterSave 中
  3. 在数据库中有触发器

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

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

有人可以帮忙吗?

【问题讨论】:

标签: cakephp


【解决方案1】:

你可以研究 CakePHP 2.x 的 AggregateCache Behavior,这里有一个小 sn-p,应该放在你的模型 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

【讨论】:

  • 感谢您的建议。我现在正在研究这种伟大的行为,它似乎符合我的需要。
  • @ZoranKalinić :不客气,如果有用,请对其他人有所帮助并将其标记为正确答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多