А если бизнес логика сидит в триггерах (БД), сейчас я вынес в хуки орм, но если захочу сменить орм, то получу боль, и куда в таком случае девать бизнес логику?
в отдельный слой или домен(это не про домен имен), ваша бизнес логика, должна в первую очередь что-то делать с данными. Она не должна знать откуда данные беруться или куда уходят. Этим должны заниматься отдельные модули. бизнес логика условно принимает некие данные или запрос обрабаты это, и возвращает ответ, но не пользователю или контролеру, а другому модулю. Так сказать промежуточному ПО, между вашей бизнес логикой и контролером.
Условно это можно упростить и описать как: "Запрос пользователя" -> "Контролер АПИ" -> "Промежуточный модуль контролера" -> "Промежуточный модуль бизнес логики" -> "Бизнес логика" -> "Модуль Базы данных" -> "Бизнес Логика" -> И дальше по цепочке обратно. По сути это система, делает каждый отдельный модуль вашего приложения независимым, от других, что позволит вам сменить базу данных, без сильной боли переписывания половины приложения.