Я начинаю использовать ORM, рекомендованный выбранным мной фреймворком, и хотя мне нравится идея дополнительного уровня абстракции, который обеспечивает ORM, я начинаю понимать, что это на самом деле означает. Это означает, что я больше не работаю с моей базой данных (mysql), и все специфические для mysql функции уходят в окно, как будто их не существует.
Идея ORM заключается в том, что он пытается помочь мне, делая все независимым от базы данных. Это звучит замечательно, но часто есть причина, по которой я выбираю определенную систему баз данных. Но, идя по пути агностики баз данных, ORM берет наименьший общий знаменатель, что означает, что в итоге я получаю наименьший набор функций (те, которые поддерживаются всеми базами данных).
Что если я знаю, что в долгосрочной перспективе я не буду менять базовую базу данных? Почему бы не получить доступ и к функциям, специфичным для базы данных?
На работе у нас есть собственный ORM, который работает довольно хорошо, но для тех случаев, когда нам нужно что-то, что его функции явно не предусматривают, есть метод, который принимает строку и вставляет ее прямо в генерируемый запрос, позволяя использовать сырой SQL, когда это необходимо.
IMO любой ORM, не имеющий этой функции, не стоит тех битов, из которых он скомпилирован.