0

我们注意到,当我们使用来自不同控制器find()的方法后,它会改变结果......contain()

在 ModelAController 里面...

公共函数索引(){

$this->ModelA->contain(...); //this affects the next find()

$this->loadModel('ModelB');
$var = $this->ModelB->find('all');

}

删除上述contain()方法后, find() 正常工作。为什么?

4

1 回答 1

1

正如 CakePHP 文档中所写:

Containable 允许您精简和简化模型绑定的操作。它通过临时或永久更改模型的关联来工作。它通过使用提供的容器来生成一系列 bindModel 和 unbindModel 调用来做到这一点。

取消绑定/绑定模型函数(如果未使用正确的参数指定)仅适用于第一个“查找”调用。也许“包含”调用根本没有释放执行的内部取消绑定/绑定调用的所有效果。

在你的情况下我会怎么做?尝试使用以下方式执行您的查找:

$this->Model->find('all', array('contain' => array(/* YOUR DIRECTIVES */), 'conditions' => array('/* YOUR CONDITIONS */));

也许这会释放 unbind / bind 调用的效果。试试看!

显然,请记住将“可包含”行为附加到您的模型;)

于 2013-04-30T22:16:55.407 回答