我在從頭開始構建的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;
}
此查詢之間的一些其他功能共用,但是也使用到數據庫的調用:: groupQuery()是我們用於會話特定的變量返回的許多查詢。
目前無法訪問實際示例但舉例來說,報告。我們可以有5個以上的連接,滾動列,添加大量計數,修改滾動統計除以計數等等。我同意ORM會妨礙我們的工作,因爲我們需要微調查詢的能力(我們有超過1億條記錄,輕微的失誤會導致我們的數據庫無效) – methodin 2010-12-11 13:42:14
在MVC設置中,報告不需要只有靈活但高度調整,我會傾向於擁有一個Reporter模型,並保持其他模型儘可能簡單。這將幫助您隔離更多的「專家級」查詢並保持參數驗證接近使用這些參數。 然後在您的Reporter模型中,我會盡可能使用可組合的查詢構建器,但這更多的是品味問題以及它是否比使用普通SQL更多或更少。 – grncdr 2010-12-17 19:29:48