CakePHP 1.3 $ this -> save () не выполняет запрос - PullRequest
0 голосов
/ 08 июня 2011

Использование CakePHP 1.3 Я пытаюсь сохранить некоторые данные в базе данных MySQL.Данные не приходят из формы, но для имитации я помещаю данные в массив данных $ this -> следующим образом:

$this -> data = Array (
                         'User' => Array (
                                            'last_login' => date ('Y-m-d H:i:s')
                                         )
                      );

Это создает массив, который выглядит точно так же, как данные Cake по умолчанию.массив.Пока все хорошо.

Затем я вызываю следующую функцию:

if ($this -> User -> save ($this -> data))
{
   echo $this -> User -> id;
}
else
{
   echo 'Save failed';
}

Всегда появляется сообщение «Не удалось сохранить», показывающее, что данные не были сохранены правильно.Я попытался отладить это различными способами:

Я проверил, существует ли функция beforeSave или beforeValidate в моей модели User или AppModel и возвращают ли они значение true.(Они сделали.)

Я повторил $this -> Session -> flash () в default.ctp.Это ничего не говорит.

Я повторил $this -> element ('sql_dump') в default.ctp.Я не вижу никаких признаков ожидаемого запроса, подтверждающих мое ожидание того, что запрос не выполняется, а не просто завершается.

От моего контроллера я повторил $this -> validationErrors.Он пуст, поэтому проверка в порядкемодель через $this -> loadModel ('User') (я сделал).

Обратите внимание, что я пытаюсь сделать это в моем AppController (поэтому я загрузил модель вручную).Более конкретно: это функция beforeFilter () в AppController.Эта функция вызывается в функции beforeFilter () во всех других контроллерах, которые есть в моем приложении (я проверял это).

В настоящий момент я не знаю, что может вызвать это.У кого-нибудь есть идеи по этому поводу?

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Вы не указываете идентификатор пользователя перед сохранением, поэтому CakePHP не знает, в какую строку сохранять дату.По сути, вы просите CakePHP просто сохранить дату, не указывая где.Прямо сейчас я не в поле своего webdev, но я верю, что это то, что вы ищете.

if( ! isset( $this->User->id ) ) {
    $this->User->create();
}
$this->User->saveField('last_login', date(DATE_ATOM));

См. эту страницу для получения дополнительной информации.Кстати, если вы хотите сделать это так, как вы это делали изначально, я думаю, что это так:

if( ! isset( $this->User->id ) ) {
        $this->User->create();
        $myId = $this->User->getLastInsertID();
} else {
  $myId = $this->User->id;
}

$this -> data = Array (
      'User' => Array (
      'id' => $myId
      'last_login' => date ('Y-m-d H:i:s')
   )
);

if ($this -> User -> save ($this -> data))
{
   echo $this -> User -> id;
}
else
{
   echo 'Save failed';
}
1 голос
/ 29 июня 2011

, если вы хотите обновить свой last_login

$this->User->id

$this->User->saveField('last_login', date ('Y-m-d H:i:s'));

или если вы сохраните все записи, у вас есть этот тип массива, и вы должныиметь "идентификатор".

этот "идентификатор" вы получаете по сеансу или в любом случае

$this -> data = Array ( 'User' => Array ( 'id' => $myId 'last_login' => date ('Y-m-d H:i:s') ) );

if ($this -> User -> save ($this -> data)) { echo $this -> User -> id; } else { echo 'Save failed'; }

...