CakePHP:$ this-> Model->包含(...)更改DIFFERENT模型的搜索结果

时间:2013-04-30 21:36:50

标签: php cakephp cakephp-2.0

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

Inside ModelAController ...

公共职能指数(){

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

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

}

当删除上面的contain()方法时,find()正常工作。为什么呢?

1 个答案:

答案 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调用的效果。试一试!

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