CakePHP Model :: save()将字段重置为默认值

时间:2011-06-16 14:02:39

标签: cakephp model cakephp-1.3

当我通过Model->save()保存(更新)MySQL数据库中的字段时,如果我没有为设置了默认值的字段指定值,则会将其重置为默认值。

即使该字段已有值,也会这样做。

例如,请考虑以下代码:

$existing_user = $this->CustomCart->User->field('id',array('User.email'=>$this->data['User']['email']));
if($existing_user)
{
    //update information
    $this->CustomCart->User->id = $existing_user;
}
$this->CustomCart->User->save($this->data);

在此代码中,它会检查用户是否已存在传递的电子邮件地址。如果是,请使用传递的信息更新该用户,否则创建新用户。

但是我在用户表中有一个名为role的字段,默认值为customer

role中的$this->data没有设置值,因此在创建新用户时,role会自动设置为客户

但是,在更新现有用户时,即使他们还有“ admin ”之类的其他用户,它仍会将值重置为客户

我不知道为什么会这样。我没有专门设置的其他字段(没有默认值)保持其值。那么为什么默认值的字段会被重置?

2 个答案:

答案 0 :(得分:5)

我得到了这个!你需要在保存之前设置它:

$this->CustomCart->User->create(false);

没有假蛋糕不知何故猜测模型应该是什么样子。

答案 1 :(得分:0)

我认为field()是你为了根据某些条件获得单个字段而创建的函数

这段代码怎么样?:

$existing_user = $this->CustomCart->User->field('id',array('User.email'=>$this->data['User']['email']));
if($existing_user !== false){
    //update information
    $this->CustomCart->User->id = $existing_user;
    $this->data['User']['role'] = "admin";
}
$this->CustomCart->User->save($this->data);
如果此代码无法正常工作,我会感到非常惊讶

祝你好运!