2014-10-28 2 views
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(); 
     $profile->save(); 

    } 
} 

프로필과 사용자 테이블의 값을 업데이트하기 위해이 코드를 사용했습니다. 하지만 작동하지 않습니다. 내가 보내는 경우 $_POST['Profile']['email'] = '[email protected]'; 오류가 있지만 데이터베이스에 여전히 오래된 값이 표시되었습니다. 왜?yii 모델 -> 저장하지 않음 업데이트 값

내가 뭘 잘못 했습니까?

다음은 $profile->attributes의 결과입니다. 이메일에는 여전히 오래된 가치가 있습니다.

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

'이메일'을 (를) 추가 했습니까? o 가능한 한 프로파일 모델? (규칙 방법) – Justinas

+1

@Justinas가 말한 것. 프로파일 모델 규칙 배열에 "전자 메일"열을 정의하지 않은 경우이 열은 저장되지 않습니다. '이메일'에 대한 유효성 검사를 원하지 않는 경우 다음과 같이 규칙에 '안전'으로 추가해야합니다. 배열 ('이메일', '안전'), "save()"가 실제로 발생하는지 확인하지 않으므로 다른 확인 오류가 표시되지 않습니다. 유효성 검사 오류가 발생하면 false를 반환하고 $ profile-> getErrors()를 사용하여 유효성 검사 오류 목록을 얻을 수 있습니다. –

+0

예 yii-user 모듈을 사용 중이기 때문에 이미 완료되었습니다. 그리고 그것은 사용자 추가 도중 잘 작동합니다. 업데이트 중 문제가 발생했습니다. –

답변

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); 

    } 
} 

합니다. 작동하고 유효성 검사가 실제로 필요한 경우 (그리고 가장 확실하게 수행해야 함), 내가 추가 한 false를 제거하고 validation guide을 따라 작성하십시오. 기억해야 할 것은 rules() 배열의 규칙과 관련없는 속성은 안전하지 않은 것으로 간주되며 이 아니며이 데이터베이스에 저장된다는 것입니다. 이것은 귀하의 문제 일 수 있습니다.

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()); 
} 
+0

알겠습니다. 내 실수입니다. 나는이 줄을 잊었다 "$ profile-> regMode = true;" 모두 감사합니다 –

+0

@SRana 당신은 환영합니다 :) – MH2K9

+0

그것은 나를 위해 일했습니다. +1 – Pupil

1

내가 저축에 가능한 오류를 확인하는 reccommend 것보다 같은 오류보고를 추가하는 것이 좋습니다 : 당신이 사용할 수

istead

$user->save(); 

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