Экономия с помощью HABTM в CakePHP

Я создаю несколько ассоциаций за один раз, и есть несколько проблем, когда дело доходит до сохранения.

У меня есть следующий код:

<?php
foreach($userData as $user) {
    $data = array('User' => array('id' => $user['id']), 'Site' => array('id' => $user['site_id']));
    $this->User->save($data);
}
?>

Я по-разному экспериментировал с форматированием массива данных, но всегда сталкивался с одними и теми же проблемами. Либо предыдущие записи перемещаются при вставке новой, либо обновляется текущая.

Я мог бы просто использовать следующее, хотя мне нужно поведение для запуска.

$this->User->SiteUser->save($data);

Изменить: также $this->User->create(); кажется, мало что делает.


person DanCake    schedule 30.07.2009    source источник


Ответы (2)


IRC помог выяснить, что было не так, как только ключ unique был установлен на false, все можно было правильно сохранить.

//In the user model
var $hasAndBelongsToMany = array(
  'Site' => array(
    'className' => 'Site',
    'unique' => false
  )
);
person DanCake    schedule 30.07.2009

Попробуйте сбросить id перед новым save(), возможно, на обеих моделях:

$this->User->id = null;

Cake решает, обновлять или вставлять записи на основе набора id, а save() автоматически устанавливает id. Не знаю, почему create() не позаботится об этом за вас.

Кроме того, если вы хотите сохранить данные HABTM, вам нужно использовать saveAll() вместо save(). Также см. этот вопрос.

person deceze♦    schedule 30.07.2009