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

5n0oy7gb  于 2022-11-11  发布在  PHP
关注(0)|答案(2)|浏览(174)

这可能不是saveAll的问题,情况是这样的。我有表messages和表sent_messages,它保存消息ID和用户ID。创建了模型,其中Messaage有Many SentMessage,而SentMessage属于Message。我只需要在 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');
            }    
        }
    }  
}

任何帮助都将不胜感激。

2ic8powd

2ic8powd1#

我认为您问题来自于使用“$key”作为$userIDs数组的键,saveAll将hasMany关系的未索引数组作为参数。
此外,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。但是我们不知道哪一个更有效。

k97glaaz

k97glaaz2#

在cakephp中保存所有数据的最简单方法

$this->ModelName->saveAll($data_array);

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

相关问题