1

假设我有Model1,它没有通过 hasOne 或任何其他关系与Model2关联。如何访问 Model2 的信息?

我尝试了以下方法:

模型/Model1.php

class Model1 extends AppModel{

public function getInfo(){

  App::uses('Model2','Model');

  $mod2_info=$this->Model2->find('all');
  return $mod2_info;

 }
}//end of class

控制器/Model1sController.php

class Model1sController extends AppController{

public function index(){

 set('info', $this->Model1->find('all'));

 }
}//end of class

查看/Model1/index.ctp

   <?php var_dump($info);   ?>

浏览器输出:
致命错误:调用 Model/Model1.php 中非对象上的成员函数 find()

4

3 回答 3

1

那么有一种方法bindModel它允许您创建临时关联。

当然,使用bindModel模型的数据库表中仍然必须有有效的外键。或者,您可以loadModelModel1sController中使用:

$this->loadModel('Model2');

然后Model2的 find 方法可用。loadModel虽然严格来说是一种控制器方法,因此您不能在模型中使用它,并且可能不是您想要的。

最后,在Model1中,您可以通过执行以下操作获取Model2实例并使用其 find 方法:

$Model2 = ClassRegistry::init('Model2');
$Model2->find('all');
于 2012-04-12T08:31:43.340 回答
1

有两种方法可以解决这个问题,$uses如果 Controller 中的每个方法都需要使用模型,则可以使用数组。当控制器必须依赖这些模型时使用它。

在这个例子中,ProductionController 在它的所有方法中都使用了这三个模型,因此它们被$uses包含在控制器的必要部分中。

 var $uses = array('DailyProdn', 'ProdnMode', 'Prod');

请注意,这会增加一些开销,因此仅$uses当此模型是控制器的*必要部分*时才使用。否则,加载模型即席。您可以使用$this->loadModel()即席样式在方法内加载模型。

在这里,ProductionController 正在加载 Plant 模型。在您尝试访问植物模型之前,请将其放入方法中find()。当您需要在几个方法中临时使用模型时,这非常有用。

 $this->loadModel('Plant');
于 2012-04-12T15:19:59.867 回答
0

在您的第一个模型之上写下:

App::uses('MyModel', 'Model');

但是你需要用不同的方式来称呼它:

$my_model = new MyModel();
$my_model->anyOtherMethod();
$my_model->read(null, '1');

更多信息从这里

于 2014-01-14T12:54:32.163 回答