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