Если Вы хотите реализовать этот функционал более корректно, тогда не стоит его пихать в контроллер т.к. ему там просто не место. Контроллер только должен осуществлять обработку запроса пользователя, взаимодействовать с уровнем бизнес-логики и представлений.
Реализуйте отдельный компонент/поведение, который будет:
1. Ловить
события сохранения данных в моделях
2. Получать из этих событий сами объекты записей
3. Вынимать из объекта
измененные данные с помощью метода getDirtyAttributes()
4. Собственно формировать объект лога и сохранять его
но перед этим я бы Вам порекомендовал поискать готовые решения, т.к. для этой задачи - они есть