2009-10-19 39 views
8

unbindModel如何在蛋糕中發生?在CakePhp中調用unbindModel。它是如何工作的?

$this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend'))); 

我在一個函數的開頭寫這個。但它仍然會查詢「朋友」模式。在函數中間調用了paginate()。所以我認爲paginator可能會產生查詢。

我在paginate之前添加了一個unbindModel調用,它現在可以工作。

$this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend'))); 
$user = $this->paginate("User", array("User.first_name LIKE" => $user["User"]["first_name"])); 

不unbindModel拆散每個查詢?還是在整個函數調用期間解除綁定?

回答

12

From the manual:除非所述第二參數已被設置爲使用false和bind- unbindModel

移除或添加協會()僅適用於下一個模型操作。如果第二個參數已設置爲false,則對於請求的其餘部分,綁定保持原位。

換句話說,在您paginate()find()之後,或者對模型做任何其他操作後,解除綁定將被逆轉。

+0

在這種情況下是很好的做法,取消綁定這樣? 'unset($ this-> User-> hasAndBelongsToMany ['Friend])' – RSK 2010-09-22 06:28:33

+1

@RSK這樣做或者什麼也不做,或者讓事情變得可怕。我不想嘗試任何一種方式。 – deceze 2010-09-22 06:29:46

+0

http://stackoverflow.com/questions/3707859/cakephp-validating-a-login-form-using-validate-array可以üPLZ回答這個 – RSK 2010-09-22 11:21:54

3

嗯,在我和解除綁定的經驗,我可以說拼版總是做2個querys一個總與第二的結果數組數

解除綁定摧毀只有一次時間的關係,並推倒你需要擴展這個規則銷燬兩次或更多次,所以你需要設置爲TRUE我想堅持這個規則:

$this->User->unbindModel(array('hasAndBelongsToMany' => array('Friend')), true); 
+1

感謝您的回答 – 2013-04-19 06:39:33

0

試試這個:

$this->Leader->find('all'); 

// Let's remove the hasMany... 
$this->Leader->unbindModel(
    array('hasMany' => array('Follower')) 
); 

// Now using a find function will return 
// Leaders, with no Followers 
$this->Leader->find('all'); 

// NOTE: unbindModel only affects the very next 
// find function. An additional find call will use 
// the configured association information. 

// We've already used find('all') after unbindModel(), 
// so this will fetch Leaders with associated 
// Followers once again... 
$this->Leader->find('all'); 
+0

我已更改您的代碼格式,請檢查 – devpro 2015-12-28 11:00:21

相關問題