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] =>
)
答案 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());
}