В большинстве написанных мною приложений, как правило, есть два разных типа доступа к данным. Один из них предназначен для транзакционных операций: извлечение определенных объектов из хранилища данных, их изменение и сохранение обратно. Я нашел твердый ORM, чтобы быть лучшим решением здесь. Не пытайтесь писать свои собственные (как бы это ни было интересно)
Другой распространенный тип доступа к данным - для отчетов. ORM здесь не лучшее решение, поэтому я обычно использую схему, использующую пользовательские запросы SQL. Обычная PDO хорошо работает здесь. Вы можете создать специальный объект значений только для этого отчета, и запрос PDO извлекает значения в объект. Отчеты должны быть быстрыми, а их построение с использованием слоя ORM обычно слишком медленное и громоздкое.