Есть эта база данных:
- Оплата - дата, сумма и т. Д.
- Баланс - т.е. история клиентских платежей и снятий. Баланс может относиться к платежу
- Существует двусторонняя связь между Платежом (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 января) вставлена
- Баланс для платежа А вставлен
- Обновлены сальдо после Платежа A - 0 строк
- Commit
- Очистить IdentityMap для балансов
- Начать транзакцию
- Оплата B (дата 2 января) вставлена
- Баланс за Оплата А вставляется снова , новый идентификатор и все
- Баланс для платежа B вставлен
- Обновлены сальдо после Платежа B - 0 строк (это хорошо)
- Commit
- Очистить IdentityMap для балансов
Что мне делать? Полностью отключить IdentityMap для баланса - как? Или корень зла в сборе платежей-> остатков (это должно быть соотношение 1: 1)? Спасибо