CakePHP 1.3 $ this - > save()不执行查询

时间:2011-06-08 15:57:31

标签: php cakephp save cakephp-1.3

使用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';
}

总是会出现“保存失败”,显示数据未正确保存。我尝试以各种方式调试它:

我检查了我的User模型或AppModel中是否存在beforeSave或beforeValidate函数,以及这些函数是否返回true。 (他们确实。)

我在default.ctp中回复了$this -> Session -> flash ()。它没有说什么。

我在default.ctp中回复了$this -> element ('sql_dump')。我没有看到任何我期望的查询的迹象,证实了我对查询没有执行的期望,而不仅仅是失败。

我的控制器回复了$this -> validationErrors。它是空的,所以验证似乎没问题。

我尝试在$this -> data array中为保存提供正确的索引,如下所示:

$this -> User -> save ($this -> data['User']);

我检查了是否通过$this -> loadModel ('User')加载了我的用户模型(我做过)。

请注意,我尝试在AppController中执行此操作(这就是我手动加载模型的原因)。更具体地说:它位于AppController中的beforeFilter ()函数中。这个函数在我的应用程序所有其他控制器的beforeFilter ()函数中调用(我检查了这个)。

目前,我不知道是什么原因引起的。有没有人对此有所了解?

2 个答案:

答案 0 :(得分:2)

您在保存之前没有指定用户ID,因此CakePHP不知道将日期保存到哪一行。实际上,您要求CakePHP只保存日期,而不指定位置。我现在远离我的webdev盒子,但我相信这就是你要找的东西。

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

有关详细信息,请参阅this page。顺便说一句,如果你想按照原来的方式去做,我认为就是这样:

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 :(得分:1)

如果你想更新你的last_login

$this->User->id

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

或 如果你保存所有记录,那么你有这种类型的数组,你必须有“id”。

你通过会话或任何方式得到的“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'; }