Сохранение данных с помощью saveAll () в CakePHP - PullRequest
2 голосов
/ 08 марта 2012

Это может быть не проблема с saveAll, ситуация такая.У меня есть таблица сообщений и таблица sent_messages, которая содержит идентификатор сообщения и идентификатор пользователя.Создаются модели, где Messaage имеет много SentMessage, а SentMessage принадлежит сообщению.Мне нужно сохранить только одно сообщение в таблице messages и сохранить идентификаторы пользователей и идентификаторы сообщений в таблице * 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');
            }    
        }
    }  
}

Любая помощь будет оценена.

1 Ответ

3 голосов
/ 08 марта 2012

Я думаю, что ваша проблема связана с использованием $ 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.Но нет ни малейшего представления о том, что является более эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...