在Controller中访问另一个CakePHP模型的最佳方法是什么?

时间:2010-05-12 18:04:43

标签: cakephp

假设我有两个像Table1sControllerTable2sController这样的控制器。 使用相应的模型:Table1sModelTable2sModel

Table1sController中,我得到了这个:

$this->Table1sModel->action();

说我想访问Table2sModel中的一些数据。

如何在Table1sController中执行此类操作? 我在Table1sController中试过这个:

$this->Table2sModel->action();

但是我收到了这样的错误消息:

  

未定义属性:Table1sController :: $ Table2sModel

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

你正在做的事情本质上是错误的。

在任何控制器中,您可以指定$ uses = array('Table1sModel','Table2sModel','LolModel')并使用控制器中所需的每个模型。您没有调用另一个控制器来访问模型。模型用于数据访问,您可以直接从任何控制器访问所需的模型。

据我所知,许多MVC示例几乎总是向您显示一个控制器的一页,其中一个模型非常错误,因为99%的情况下您使用不同模型的许多不同部分从一个控制器获得一个站点。

(如果你真的需要调用一个动作,请使用$ this-requestAction())