2011-09-02 64 views
4

我正在閱讀很多關於MVC的教程,所以我的問題,完美的PHP MVC框架可以在Controller中進行數據庫查詢嗎?據我所知,最舒服的方法是將所有數據庫查詢放在Model中,對嗎?如果我有POST或者smth,那麼我只需將該POST傳遞給Model,並使所有插入等等?控制器可以有數據庫查詢(MySQL)嗎?如果是,何時?

或者我錯過了什麼?如果控制器可以有數據庫查詢,在哪種情況下呢?

回答

7

無控制器可能不具備任何數據庫相關的代碼 - 所有的數據庫查詢可以存儲在模型中的MVC架構 - 控制器只適用於模型,而不是直接與DB

編輯:大多數框架將允許直接調用SQL從控制器 - 但它不是MVC,但一堆對象

+0

那麼意見呢?我的觀點應該有嗎? u___u x_x我沒有發現任何問題。 – porfiriopartida

+0

不,它不應該,視圖中所需的任何數據必須在控制器中準備好。我只使用輔助函數,但這不是乾淨的MVC。 – SergeS

2

技術上 - 是的,這是可能的。但它會打破MVC背後的整個想法。

+0

那麼,爲什麼CodeIgniter允許呢? –

+4

@hey因爲他們是新手。 –

+0

@OZ_:大聲笑,這是誠實的:D –

6

否控制器不能IDEALLY和CONCEPTUALLY包含任何數據庫查詢。如果你在控制器本身中有一些查詢,那麼它將帶走MVC體系結構的一些關鍵優勢,例如代碼隔離等。

理想情況下,您的 模型類(M)必須包含數據庫查詢以及通過數據庫對象與數據庫的任何交互。模型理想地代表DB中的表格或用於io的文件。視圖(V)必須包含非常少的PHP的HTML。在大多數情況下,僅使用循環和條件語句

控制器類(C)必須包含應用程序的所有業務邏輯,錯誤處理程序等。

維護MVC架構在維護,調試和代碼理解方面對於新開發人員來說非常有用。如上所述,規範帶來了很多好處。

+2

我同意不同意。控制器應該只用於控制應用程序的流程。錯誤處理和業務邏輯應該包含在你的模型中。我喜歡知道模特可以100%自立。他們處理他們自己的驗證,邏輯和錯誤處理。我想我們都有不同的意見。 – TheBrent

0

在我的軟件,我使其能夠提取模型查詢對象,並從內部控制器執行它們:

$model->dsql()->where('age>',20)->do_delete(); 

因此從技術上 - 是的,控制器可以執行查詢,但它必須依賴在模型上構建該查詢。

相關問題