2009-10-19 13 views
8

Jak działa unbindModel w ciastku?unbindModel wywołanie w CakePhp. Jak to działa?

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

Napisałem to na początku funkcji. Ale wciąż kwestionuje model "Przyjaciela". W środku funkcji było wywołanie funkcji paginate(). Pomyślałem więc, że paginator może generować zapytania.

Dodałem polecenie unbindModel tuż przed paginacją, a teraz działa.

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

Does unbindModel rozpiąć każde zapytanie? czy to się odwiąże podczas całego wywołania funkcji?

Odpowiedz

12

From the manual:

usunięcie lub dodanie stowarzyszenia wykorzystujące bind- i unbindModel() działa tylko dla następnej operacji modelu chyba drugi parametr został ustawiony na false. Jeśli drugi parametr został ustawiony na false, powiązanie pozostaje na miejscu dla pozostałej części żądania.

Innymi słowy, po paginate() lub find() czy cokolwiek innego z modelu, niewiążące ulegną odwróceniu.

+0

w tym przypadku jest to dobra praktyka, aby rozwiązać tak ?? 'unset ($ this-> User-> hasAndBelongsToMany ['Friend])' – RSK

+1

@RSK To by albo nie działało, albo strasznie potłukło. Nie chciałbym spróbować w żaden sposób. – deceze

+0

http://stackoverflow.com/questions/3707859/cakephp-validating-a-login-form-using-validate-array można odpowiedzieć plz dla tego – RSK

3

Cóż, w moim doświadczeniu z usuwa powiązanie, mogę powiedzieć paginate zawsze 2 querys jeden dla policzyć całkowity a drugi na tablicy wyników

unbind zniszczyć tylko raz czas relacja i tak trzeba rozszerzyć tę zasadę zniszczyć dwa lub więcej razy, więc trzeba ustawić TRUE Chyba się utrzymywać tę regułę:

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

dziękuję za odpowiedź –

0

Spróbuj tego:

$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

zmieniłem formatowanie kodu, proszę sprawdzić – devpro