我们注意到,当我们在不同控制器的find()
方法之后使用contain()
时,它会改变结果......
Inside ModelAController ...
公共职能指数(){
$this->ModelA->contain(...); //this affects the next find()
$this->loadModel('ModelB');
$var = $this->ModelB->find('all');
}
当删除上面的contain()
方法时,find()正常工作。为什么呢?
答案 0 :(得分:1)
如CakePHP文档中所述:
Containable允许您简化和简化模型绑定的操作。的它 通过暂时或永久改变模型的关联来工作。它可以做到这一点 通过使用提供的包含来生成一系列bindModel和unbindModel调用。
unbind / bind模型函数仅对第一个“查找”调用起作用(如果未使用正确的参数指定)。也许“包含”调用不会释放所执行的内部unbind / bind调用的所有效果。
在你的情况下我会怎么做?尝试使用以下内容执行查找:
$this->Model->find('all', array('contain' => array(/* YOUR DIRECTIVES */), 'conditions' => array('/* YOUR CONDITIONS */));
也许这会释放unbind / bind调用的效果。试一试!
显然,请记住将“可包含”行为附加到您的模型中;)