Сохранение с помощью HABTM в CakePHP
-
05-07-2019 - |
Вопрос
Я создаю несколько ассоциаций за один раз, и при сохранении возникает несколько проблем.
У меня есть следующий код:
<?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 (); похоже, мало что делает.
Решение
IRC помог понять, что было не так, когда ключ уникальный был установлен в false , все было в состоянии сохранить правильно.
//In the user model
var $hasAndBelongsToMany = array(
'Site' => array(
'className' => 'Site',
'unique' => false
)
);
Другие советы
Попробуйте сбросить id
перед новым save ()
, возможно, на обеих моделях:
$this->User->id = null;
Cake решает, обновлять или вставлять записи на основе набора id
, а save ()
автоматически устанавливает id
. Не уверен, почему create ()
не позаботится об этом за вас.
Кроме того, если вы хотите сохранить данные HABTM, вам нужно использовать saveAll ()
вместо save ()
. Также см. этот вопрос .