También podemos poner esto en app_model.php (/rutadeCake/app/app_model.php),
al menos en Cakephp 1.2 anda:
class AppModel extends Model{
function unbindAll($params = array())
{
foreach($this->__associations as $ass)
{
if(!empty($this->{$ass}))
{
$this->__backAssociation[$ass] = $this->{$ass};
if(isset($params[$ass]))
{
foreach($this->{$ass} as $model => $detail)
{
if(!in_array($model,$params[$ass]))
{
$this->__backAssociation = array_merge($this->__backAssociation,
$this->{$ass});
unset($this->{$ass}[$model]);
}
}
}else
{
$this->__backAssociation = array_merge($this->__backAssociation,
$this->{$ass});
$this->{$ass} = array();
}
}
}
return true;
}
/**
* Adds to a HABTM association some instances
*
* @param integer $id The id of the record in this model
* @param mixed $assoc_name The name of the HABTM association
* @param mixed $assoc_id The associated id or an array of id's to be
added
* @return boolean Success
*/
function addAssoc($id,$assoc_name,$assoc_id)
{
$data=$this->_auxAssoc($id,$assoc_name);
if (!is_array($assoc_id)) $assoc_id=array($assoc_id);
$data[$assoc_name][$assoc_name]=am($data[$assoc_name][$assoc_name],$assoc_id);
return $this->save($data);
}
/**
* Deletes from a HABTM association some instances
*
* @param integer $id The id of the record in this model
* @param mixed $assoc_name The name of the HABTM association
* @param mixed $assoc_id The associated id or an array of id's to be
removed
* @return boolean Success
*/
function deleteAssoc($id,$assoc_name,$assoc_id)
{
$data=$this->_auxAssoc($id,$assoc_name);
if (!is_array($assoc_id)) $assoc_id=array($assoc_id);
$result=array();
foreach ($data[$assoc_name][$assoc_name] as $id)
{
if (!in_array($id, $assoc_id)) $result[]=$id;
}
$data[$assoc_name][$assoc_name]=$result;
return $this->save($data);
}
/**
* Returns the data associated with a HABTM in an array
* suitable for save without deleting the current relationships
*
* @param integer $id The id of the record in this model
* @param mixed $assoc_name The name of the HABTM association
* @return array Data array with current HABTM association intact
*/
function _auxAssoc($id,$assoc_name)
{
//disable query cache
$back_cache=$this->cacheQueries;
$this->cacheQueries=false;
$this->recursive=1;
$this->unbindAll(array('hasAndBelongsToMany'=>array($assoc_name)));
$data=$this->findById($id);
$assoc_data=array();
foreach ($data[$assoc_name] as $assoc)
{
$assoc_data[]=$assoc['id'];
}
unset($data[$assoc_name]);
$data[$assoc_name][$assoc_name]=$assoc_data;
//restore previous setting of query cache
$this->cacheQueries=$back_cache;
return $data;
}
El día 11/10/07, BarbaRoja <[EMAIL PROTECTED]> escribió:
>
>
> Saludos comunidad. Me pregunto si saben de alguna manera de ejcutar un
> unbind a un modelo sin necesidad de pasar como parametros cada una de
> las asociaciones del modelo.
>
> Ejemplo, en vez de:
> $this->unbindModel(array('belongsTo' => array('Group')));
>
> Algo tipo:
> $this->unbindModel(all);
>
> Obviamente que no creo que exista algo asi, pero si saben de algun
> truquillo les agradezco.
>
> Saludos!
>
>
> >
>
--
Limpio, fijo y espléndido.
--~--~---------~--~----~------------~-------~--~----~
Has recibido este mensaje porque estás suscrito a Grupo "CakePHP-es" de Grupos
de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a [email protected]
Para anular la suscripción a este grupo, envía un mensaje a [EMAIL PROTECTED]
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/CakePHP-es?hl=es.
-~----------~----~----~----~------~----~------~--~---