You have strict sql mode enabled, and you try to pass an empty string ('') as value for decimal fields in the insert. Empty string is an invalid value for a numeric field and in strict sql mode mysql generates an error if you try to insert an invalid data into a column, rather than providing a warning and use the default value (0 for numeric columns) of the particular column's data type:
Родион Юрченко, Если будет много логики, тем более похожей, ее можно вынести в сервис класс.
Ну мне лично не нравится идея, делать разные котроллеры под один роут, так как в них не должно быть логики. Один роут обрабатывает один котроллер, а уже в нем дергайте нужную логику
Или юзать
use DatabaseTransactions;