Risparmio con HABTM in CakePHP
-
05-07-2019 - |
Domanda
Sto creando più associazioni in una volta sola e ci sono alcuni problemi quando si tratta di salvare.
Ho il seguente codice:
<?php
foreach($userData as $user) {
$data = array('User' => array('id' => $user['id']), 'Site' => array('id' => $user['site_id']));
$this->User->save($data);
}
?>
Ho sperimentato la formattazione dell'array di dati in diversi modi, anche se riscontro sempre gli stessi problemi. Le voci precedenti vengono spostate quando viene inserita una nuova o viene aggiornata quella corrente.
Potrei semplicemente usare quanto segue anche se ho bisogno di un comportamento per innescare.
$this->User->SiteUser->save($data);
Modifica: anche $ this- > User- > create (); non sembra fare molto.
Soluzione
L'IRC ha aiutato a capire cosa non andava, una volta che la chiave unica era impostata su false tutto era in grado di salvare correttamente.
//In the user model
var $hasAndBelongsToMany = array(
'Site' => array(
'className' => 'Site',
'unique' => false
)
);
Altri suggerimenti
Prova a ripristinare id
prima di un nuovo save ()
, possibilmente su entrambi i modelli:
$this->User->id = null;
Cake decide se aggiornare o inserire voci in base al set id
e save ()
imposta automaticamente un id
. Non so perché create ()
non se ne occupi per te.
Inoltre, se si desidera salvare i dati HABTM, è necessario utilizzare saveAll ()
anziché save ()
. Vedi anche questa domanda .