Poupar com HABTM no CakePHP
-
05-07-2019 - |
Pergunta
Estou criando várias associações de uma só vez e há alguns problemas quando se trata de poupar.
Eu tenho o seguinte código:
<?php
foreach($userData as $user) {
$data = array('User' => array('id' => $user['id']), 'Site' => array('id' => $user['site_id']));
$this->User->save($data);
}
?>
Eu experimentei com a formatação da matriz de dados de maneiras diferentes, embora eu sempre encontrar os mesmos problemas. Ou as entradas anteriores são movidos quando um novo é introduzido ou o atual é atualizado.
Eu poderia usar apenas o seguinte, embora eu preciso de um comportamento para gatilho.
$this->User->SiteUser->save($data);
Edit: Também $ this-> User-> create (); não parece fazer muito.
Solução
O IRC ajudou a descobrir o que estava errado, uma vez que o única chave foi definido para false tudo era capaz de salvar corretamente.
//In the user model
var $hasAndBelongsToMany = array(
'Site' => array(
'className' => 'Site',
'unique' => false
)
);
Outras dicas
Tente repor o id
antes de um novo save()
, possivelmente em ambos os modelos:
$this->User->id = null;
Cake decide se atualizar ou inserir entradas com base no id
set, e save()
define um id
automaticamente. Não sei por que create()
não cuidar do presente para você.
Além disso, se você deseja salvar os dados HABTM, você deve precisar usar saveAll()
vez de save()
. Veja também esta questão .