禁用原则IdentityMap

时间:2019-01-23 17:30:41

标签: php doctrine-orm

有此数据库:

  • 付款-日期,金额等
  • 余额-即客户付款和提款的历史记录。余额可能是指付款
  • “付款”(1)和“余额”(n)之间存在双向关联,级联和全部关联

当我添加新的付款时,会插入新的余额记录,并且以后所有的余额也会更新(付款的日期可能是过去的日期)。例如:

UPDATE balance
SET balance_amount = balance_amount + :payment_amount
WHERE balance_date > :payment_date;

然后,我清除IdentityMap(或其任何名称,似乎Doctrine不会将其视为“缓存”?),因为如果我不这样做,则更新的值将不会反映在实体中:

$em->clear(Balance::class);

问题在于随后插入了2个付款项:

  • 开始交易
  • 已插入付款A(日期为1月1日)
  • 已插入付款余额A
  • 付款A以后的余额已更新-0行
  • 提交
  • 清除IdentityMap的余额
  • 开始交易
  • 已插入付款B(日期为1月2日)
  • 付款A的余额再次插入,新ID和所有内容
  • 已插入付款余额B
  • 付款B以后的余额已更新-0行(很好)
  • 提交
  • 清除IdentityMap的余额

我该怎么办?完全禁用IdentityMap for Balance-如何进行?还是“付款”->“余额”集合中的邪恶根源(实际上应该是1:1关系)?谢谢

0 个答案:

没有答案