Сохранение с помощью HABTM в CakePHP - PullRequest
3 голосов
/ 30 июля 2009

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

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

<?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 (); похоже, мало что делает.

Ответы [ 2 ]

8 голосов
/ 30 июля 2009

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

//In the user model
var $hasAndBelongsToMany = array(
  'Site' => array(
    'className' => 'Site',
    'unique' => false
  )
);
1 голос
/ 30 июля 2009

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

$this->User->id = null;

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

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

...