这可能不是saveAll的问题,情况是这样的。我有表消息和表sent_messages,它包含消息ID和用户ID。创建模型,其中Messaage具有多个SentMessage,而SentMessage属于ToTo消息。我需要在 messages 表中只保存一条消息,并将用户ID和消息ID保存在* sent_messages *表中。当我尝试在MessageController中保存它时,问题就开始了。这是代码:
function custom() {
if (!empty($this->data)) {
$this->loadModel('User');
$userIDs = $this->User->listActiveUsers();
$this->data['Message']['message_type_id'] = 2;
if ($this->Message->save($this->data)) {
array_pop($this->data);
foreach ($userIDs as $key => $value ) {
$this->data['SentMessage'][$key]['user_id'] = $value;
$this->data['SentMessage'][$key]['message_id'] = $this->Message->getLastInsertID();
}
//die($this->Message->SentMessage->saveAll($this->data));
if ($this->Message->SentMessage->saveAll($this->data)) {
$this->Session->setFlash('Data saved', 'success');
}
else {
$this->Session->setFlash('Data not saved', 'error');
}
}
}
}
任何帮助都将不胜感激。
答案 0 :(得分:3)
我认为您的问题来自于使用" $ key"作为$ userIDs数组的键,saveAll将hasMany关系的unindexed数组作为参数。
此外,saveAll非常适合同时保存两个相关模型。这里应该有用的东西:
function custom() {
if (!empty($this->data)) {
$this->loadModel('User');
$this->data['Message']['message_type_id'] = 2;
$userIDs = $this->User->listActiveUsers();
foreach ($userIDs as $value ) {
$this->data['SentMessage'][]['user_id'] = $value;
}
if ($this->Message->saveAll($this->data)) {
$this->Session->setFlash('Data saved', 'success');
} else {
$this->Session->setFlash('Data not saved', 'error');
}
}
}
检查文档! http://book.cakephp.org/view/1031/Saving-Your-Data
关于使用loadModel,我认为您的SentMessage模型与User相关,因此您可以使用:$ this-> Message-> SentMessage-> User。但是不知道哪个更有效率。
答案 1 :(得分:1)
将所有数据保存在cakephp中的最简单方法
$this->ModelName->saveAll($data_array);
注意:表和数组中的字段名称应相同。