使用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 ()
函数中调用(我检查了这个)。
目前,我不知道是什么原因引起的。有没有人对此有所了解?
答案 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';
}