0

让我们假设以下情况:

  • A属于B,C
  • B有很多A
  • C 有很多 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']...

有人可以帮忙吗?

4

1 回答 1

1

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

于 2013-05-27T06:54:20.377 回答