2009-10-19 11 views
8

¿Cómo ocurre unbindModel en el pastel?unbindModel llamar en CakePhp. ¿Como funciona?

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

Escribí esto al principio de una función. Pero aún consulta el modelo 'Amigo'. Hubo una llamada a paginate() en el medio de la función. Así que pensé que el paginador podría estar generando las consultas.

Agregué una llamada a unbindModel justo antes de paginar y ahora funciona.

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

Does unbindModel unbind cada consulta? o se desvincula durante toda la llamada a la función?

Respuesta

12

From the manual:

eliminación o adición de asociaciones usando bind- y unbindModel() sólo funciona para la siguiente operación de modelo a menos que el segundo parámetro se ha establecido en false. Si el segundo parámetro se estableció en false, el enlace permanece en su lugar durante el resto de la solicitud.

En otras palabras, después de que paginate() o find() o hacer cualquier otra cosa con el modelo, la desvinculación se invertirá.

+0

en este caso, es una buena práctica para desenlazar como esto ?? 'unset ($ this-> User-> hasAndBelongsToMany ['Friend])' – RSK

+1

@RSK Eso no haría nada, o rompería cosas horriblemente. No quisiera intentarlo de ninguna manera. – deceze

+0

http://stackoverflow.com/questions/3707859/cakephp-validating-a-login-form-using-validate-array puede por favor responder por esto – RSK

3

Bueno, en mi experiencia con la asignación hecha, puedo decir Paginate siempre hacer 2 querys uno para contar el total y el segundo para la matriz resultado

unbind destruir una sola vez el tiempo la relación y sí lo necesario extender esta regla para destruir dos o más veces por lo que necesita para establecer TRUE supongo que persista esta regla:

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

gracias por esta respuesta –

0

Prueba esto:

$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

he cambiado el formato del código, compruebe – devpro

Cuestiones relacionadas