2013-04-30 63 views
0

搜索結果中我們注意到,當我們從不同控制器一個contain()方法之後使用find(),它改變了結果...

裏面ModelAController ...

公共功能指數(){

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

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

}

當上面的contain()方法被刪除時,find()正常工作。爲什麼?

+0

是否有'ModelA'和'ModelB'之間的任何關聯?通過調用'contains'方法,你將會改變'ModelA'的狀態,但是如何與'ModelB'相互關聯還不太清楚。我強烈建議你發佈'$ this->元素('sql_dump')的內容來幫助其他人識別真正發生的事情。 – 2013-04-30 21:43:30

回答

1

寫在CakePHP的文檔:

中可容納允許您簡化和模型綁定簡化操作。 它 通過暫時或永久改變您的模型的關聯。它通過使用提供的遏制來生成一系列bindModel和unbindModel調用來執行此操作 。

只有在第一次「查找」調用時,取消綁定/綁定模型函數才起作用(如果沒有用右參數指定)。也許「包含」調用不會釋放所有執行的內部解除綁定/綁定調用的效果。

我會在你的情況下做什麼?嘗試使用類似這樣的方式執行搜索:

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

也許這會釋放解除/綁定調用的效果。試一試!

顯然,記住了「中可容納」行爲附加到你的模型;)