journal; // get the event connected to this journal: /** @var PiggyBankEvent $event */ $event = PiggyBankEvent::where('transaction_journal_id', $journal->id)->first(); if (is_null($event)) { return; } $piggyBank = $event->piggyBank()->first(); $repetition = $piggyBank->piggyBankRepetitions()->relevantOnDate($journal->date)->first(); if (is_null($repetition)) { return; } $amount = 0; /** @var Transaction $transaction */ foreach ($journal->transactions()->get() as $transaction) { if ($transaction->account_id === $piggyBank->account_id) { // this transaction is the relevant one. $amount = floatval($transaction->amount); } } // update current repetition: $diff = $amount - $event->amount; $repetition->currentamount += $diff; $repetition->save(); $event->amount = $amount; $event->save(); } }