Отключить Doctrine IdentityMap - PullRequest
       7

Отключить Doctrine IdentityMap

0 голосов
/ 23 января 2019

Есть эта база данных:

  • Оплата - дата, сумма и т. Д.
  • Баланс - т.е. история клиентских платежей и снятий. Баланс может относиться к платежу
  • Существует двусторонняя связь между Платежом (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)? Спасибо

...