У нас в движке как раз все реализовано через мапперы, по умолчанию они у нас бывают двух типов, Коллекции и Ресурс модели, первая реализовывает работу с набором сущностей, вторая с одной конкретной.
Так вот, выборкой и поиском занимается коллекция, и фильтрация там реализована через отдельный метод в который передаются условия для фильтрации в специальном формате, а уже коллекция формирует sql запрос, и экранирует параметры. Если мне этого не хватает, я добавлю свой метод который реализовывает какой то специфический запрос.
ps: использование статических методов и синглтонов — моветон.