2011-03-30 19 views
1

雖然我在PHP中相當體面我對框架很陌生。 上週從CI開始,發現自己本週在看Kohana。 我對此提出了幾個問題:Kohana ORM&MVC

  1. 爲什麼ORM vs傳統的SQL或活動查詢? ($data=$q->where('category', '=', 'articles')->find_all();}
  2. 我怎麼會在ORM做一個條件查詢?(有點像
  3. 如果模型必須獲取從數據庫數據,怎麼進來的ORM大部分動作發生在控制器(或者看起來是這樣),即if(isset($ _ GET ['category'])... etc)如果條件傳遞給模型?或者控制器是否應該執行所有條件

僅供參考我的查詢往往有許多聯接我有限的知識告訴我,我應該有一個查詢控制器,將查詢參數傳遞給查詢模型,查詢並返回結果。 請讓我知道我的理解是否正確 非常感謝你

回答

2
  1. ORM是某種包裝的在DB層。所以,你只需撥打$user->find($id)而不是$db->query('select * from users where id='.$id)DB::select()->from('users')->where('id', '=', $id)->limit(1)->execute()。你聲明模型參數(表名,關係等)並且只使用模型方法來處理它的數據。您可以輕鬆更改數據庫結構或數據庫引擎,而無需修改大量控制器代碼。

  2. 同意Ikke,控制器應避免查詢條件等模型特定的數據。例如,創建方法get_by_category($category)

  3. 參見#2。所有你想要的參數應該傳入模型方法中(這可以使用鏈接完成,如$object->set_category($category)->set_time_limit(time())->limit(10))。

2
  1. ORM只是另一種獲取數據的方式。這個想法是有許多常見的操作類型,並且可以自動化。而且因爲表格之間的關係可以很容易地轉換爲相互引用的對象,所以創建了ORM。

    如果您想使用提供的ORM模塊,則取決於您。還有其他常用的(如小枝,果凍和自動建模)。

  2. 我個人的意見是將這種操作限制在最低限度。非常簡單的操作可以通過這種方式完成,因爲它幾乎不會在將它們放入模型中產生任何優勢,但最好的方法是儘可能在模型中儘可能多地放置業務邏輯。

    另一點是它應該是從模型中獲取數據的視圖。這樣,當你想重新使用一個視圖時,很少的代碼必須被複制。但爲了防止視圖中出現過多的邏輯,建議使用包含視圖邏輯的所謂視圖類,併爲視圖提供交互接口。

  3. 有一個驗證庫來確保您的模型的所有數據都是正確的。你的模型不應該知道$ _GET和$ _POST,但是來自這些數組的數據可以傳遞給你的模型。

+0

如果我要在其中運行整個查詢並將條件傳遞給它,您能否描述更多ORM模型的外觀? – salmane 2011-03-30 12:14:07