Мне кажется вы не правильно формулируете само условие задачи. По сути, ваша модель Трата - это лог для модели Кошелек. Т.е. когда меняете баланс, то вы туда записываете когда, на сколько, кем и почему был изменен баланс. Но делать это надо соответственно после изменения баланса. И не правильно будет после удаления лога менять баланс.
Вам надо идти с другой стороны: т.е. вы изначально меняете баланс (перед этим выполнив все нужные проверки и валидации, например положительный ли он), сохраняете его и после сохранения колбеком создаете уже лог (Трату).
Соответственно, если к примеру происходит возврта средств, то вы не удаляете неверный лог, а возвращаете на баланс деньги и записываете это в лог (траты). Ну и модель возможно стоит тогда переименовать, что бы она была более общая.
Есть еще конечно вариант, если в вашем случае Траты - это нечто похожее на Order (Заказ), то тогда идете так же коллбеком в обратную сторону. Но, опять же, будет не правильно удалять полностью запись, лучше добавить в эту таблицу поле status и проставлять его в canceled. Далее уже обрабатываете коллбеком это состояние и меняете баланс. Но, я бы еще добавил тогда дополнительно табличку для логирования всех этих действий.