yii model->保存不适用于更新值

时间:2014-10-28 15:20:30

标签: php mysql yii

public function actionUpdateprofile(){
    $user = User::model()->findByPk($_POST['User']['user_id']);
    $profile = Profile::model()->findByPk($_POST['User']['user_id']);

    if(isset($_POST['User']) || isset($_POST['Profile'])){
        $user->attributes = $_POST['User'];
        $profile->attributes = $_POST['Profile'];
        $user->save();
        $profile->save();

    }
}

我使用此代码更新了配置文件和用户表中的值。但它不起作用。 如果我发送$_POST['Profile']['email'] = 'abc@gmail.com'; 没有错误,但数据库仍显示旧值。为什么呢?

我在那里做错了什么?

这是$profile->attributes的结果。电子邮件仍有旧价值。

Array
(
    [user_id] => 35
    [lastname] => asd
    [firstname] => asrtyr
    [email] => xyz.gmail.com
    [phoneno] => 123456
    [prof_img] => 
    [phoneno2] => 0
    [agentKey] => 
    [fb_id] => 
)

3 个答案:

答案 0 :(得分:5)

我建议您添加错误报告,如下所示

if(!$user->save()){
    echo 'Error to save user model<br />';
    var_dump($user->getErrors());
}
if(!$profile->save()){
    echo 'Error to save profile model<br />';
    var_dump($profile->getErrors());
}

答案 1 :(得分:1)

首先,执行此操作以检查是否与验证有关(请参见下面的示例)并对其进行测试:

public function actionUpdateprofile(){
    $user = User::model()->findByPk($_POST['User']['user_id']);
    $profile = Profile::model()->findByPk($_POST['User']['user_id']);

    if(isset($_POST['User']) || isset($_POST['Profile'])){
        $user->attributes = $_POST['User'];
        $profile->attributes = $_POST['Profile'];
        $user->save(false);
        $profile->save(false);

    }
}

哪个会绕过验证。如果它有效,并且您确实需要验证(并且您肯定会这样做),请删除我添加的错误,并按照validation guide进行构建。要记住的是:与rules()数组中的规则无关的属性被认为是不安全的,并且 NOT 保存到数据库中。这可能是你的问题。

答案 2 :(得分:1)

建议检查保存时可能出现的错误:

而不是

$user->save();

你可以使用

if (!$user->save()){
  print_r($user->getErrors());
}