Ahorrando con HABTM en CakePHP
-
05-07-2019 - |
Pregunta
Estoy creando varias asociaciones de una sola vez y hay algunos problemas a la hora de guardar.
Tengo el siguiente código:
<?php
foreach($userData as $user) {
$data = array('User' => array('id' => $user['id']), 'Site' => array('id' => $user['site_id']));
$this->User->save($data);
}
?>
He experimentado con el formateo de la matriz de datos de diferentes maneras, aunque siempre encuentro los mismos problemas. O bien las entradas anteriores se mueven cuando se inserta una nueva o se actualiza la actual.
Podría usar lo siguiente, aunque necesito un comportamiento para activarlo.
$this->User->SiteUser->save($data);
Editar: También $ this- > User- > create (); no parece hacer mucho.
Solución
El IRC ayudó a resolver lo que estaba mal, una vez que la tecla única se configuró como falsa , todo se pudo guardar correctamente.
//In the user model
var $hasAndBelongsToMany = array(
'Site' => array(
'className' => 'Site',
'unique' => false
)
);
Otros consejos
Intente restablecer el id
antes de un nuevo save ()
, posiblemente en ambos modelos:
$this->User->id = null;
Cake decide si actualizar o insertar entradas en función del conjunto id
, y save ()
establece un id
automáticamente. No estoy seguro de por qué create ()
no se encarga de esto por ti.
Además, si desea guardar datos HABTM, debe usar saveAll ()
en lugar de save ()
. Consulte también esta pregunta .