CakePHP 1.3$this->;save()没有';t执行查询


CakePHP 1.3 $this -> save () doesn't execute a query

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

它总是显示"保存失败",表示数据没有正确保存。我试着用多种方式调试它:

我检查了用户模型或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 ()函数中。这个函数在我的应用程序中每隔一个Controller的beforeFilter ()函数中都会被调用(我已经检查过了)。

目前,我不知道是什么原因造成的。有人知道这件事吗?

您在保存之前没有指定User id,所以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';
}

如果您想更新您的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'; }