2010-05-12 23 views
3

假設我有兩個控制器,例如Table1sControllerTable2sController。 與相應的型號:Table1sModelTable2sModel在控制器中訪問另一個CakePHP模型的最佳方式是什麼?

Table1sController,我得到這個:

$this->Table1sModel->action(); 

說我要訪問Table2sModel一些數據。

如何在Table1sController中做這樣的事情? 我在Table1sController嘗試這樣:

$this->Table2sModel->action(); 

但我收到這樣的錯誤消息:

未定義的屬性:Table1sController :: $ Table2sModel

回答

8

有幾種方法來到這裏。

如果你的模型已經定義的關聯(的hasMany等),那麼你就可以訪問該模型的方法(假設你在Model1Controller是)有:

$this->Model1->Model2->method(); 

如果在兩者之間沒有關聯模型模型,但是您希望能夠使用Model2的方法,則可以在model1Controller的$ uses屬性中添加一個條目。請參閱http://book.cakephp.org/2.0/en/controllers.html#components-helpers-and-uses

最後,如果它是暫時連接(您不希望每次加載其他模型的開銷,因爲您很少訪問model2),請查看手冊中有關創建/銷燬關聯的部分在飛行中,在http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

2

你在做什麼事情本質上是錯誤的。在任何控制器中,您都可以指定$ uses = array('Table1sModel','Table2sModel','LolModel'),並在控制器中使用您需要的每個模型。您沒有呼叫另一個控制器訪問模型。模型用於數據訪問,您可以直接從任何控制器訪問需要的模型。我知道,許多MVC示例幾乎總是向您顯示一個控制器頁面,其中一個模型是非常錯誤的,因爲99%的情況下,您使用不同模型的許多不同部件從一個控制器獲取一個站點。

(如果您確實需要調用某個操作,請使用$ this-requestAction())

相關問題