У меня есть похожие проблемы в MVC-фреймворке, который я создавал с нуля.
Мне не особо нравятся издержки SELECT * на сложные запросы, поэтому я не создавал эти функции вчто бы то ни было.
Кодирование медленнее, но я кодирую каждый запрос вручную в соответствующем классе (моя модель вызывает класс в 99% случаев).
Для действительно сложных запросов, разделяемых между различнымиподпрограммы, у меня есть функции, которые возвращают родовые объединения, а затем объединяют дополнительные параметры для этого конкретного запроса.
Пример, предоставляемый в соответствии с запросом:
private function returnFindClientRequests(){
$query = "SELECT
SR.sign_project_name, SR.module_signregister_id_pk
,SRI.module_signregister_sign_id_pk,SRI.sign_location_address
,SRR.status, SRR.module_signregister_item_client_request_id_pk, SRR.client_comment, SRR.requested_by_user, SRR.date_created
,SRR.admin_comment, SRR.date_actioned
,CL.client_name, CL.module_client_id_pk
FROM
`module_signregister` SR, `module_signregister_item` SRI, `module_signregister_item_client_request` SRR, `module_client` CL
WHERE
SR.module_signregister_id_pk = SRR.module_signregister_id_pk
AND SRR.module_signregister_sign_id_pk = SRI.module_signregister_sign_id_pk
AND SRR.requested_by_group = CL.module_client_id_pk
AND " . Database::groupQuery('CL');
return $query;
}
Этот запрос используется несколькимидругие функции, но также использует вызов Database :: groupQuery (), который мы использовали для возврата специфичных для сеанса переменных во многие запросы.