То что в двух-уровневом клиент-сервреном приложении, программировалось на уровне субд (значения по умолчанию для полей, ссылочная целостность, хранимые процедуры, constraint, каскадные обновлени, удаления и т.д.
все это применительно к PHP+Mysql, зачастую делается на уровне PHP. С техничексой точки зрения это тоже оправдано, потому что это один сервер одни и теже ресурсы и можно считать что mysql - это бд с мнимальным функционалом.
Так что ORM, дает нам не только уровень абстракции работы с нашими моделями, но и выполняет много полезных функций, которые можно было бы реализовыать на уровне рсубд.
Когда у нас несколько разных источников данных с разными возможностями - ORM позволяет скрыть их преимущества и недостки за общими интерфесами.
ваяс
ORM - это не cоздание SQL запросов. Содание SQL запросов - это DBAL.
ORM - это виртуальная объектная база данных, частью которой (внутренним API) является DBAL.
В Doctrine есть DQL, в Java Persistent API свой похожий язык работы с этой виртуальной базой объектов.
DQL - не заменяет SQL, это другой уровень. Когда нужно использовать DQL вместо SQL ? Ну тогда когда станет очевидным, что от этого есть профит.
Вполне можно обходится и без "DQL", создавая свои сервисы, используя DBAL нашей ORM, фактически расширяется язык доступа к виртуальной объектной базе, реализуя всякие частные случаи.