使用CakePHP中的saveAll()保存数据

时间:2012-03-08 11:25:33

标签: cakephp

这可能不是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');
            }    
        }
    }  
}

任何帮助都将不胜感激。

2 个答案:

答案 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);

注意:表和数组中的字段名称应相同。