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.

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top