2014-11-11 4 views
0

Eloquent를 사용하여 데이터베이스에 레코드를 삽입하려고합니다. 나는 새 사용자를 생성하고 그리고 그/그녀가 로그인 할 때와 같이 사용자가 그/그녀의 프로필을 업데이트 할 수 있도록 다음 프로파일 테이블에 새 행을 삽입하고있어서, 다음과 같은 코드가 있습니다.트랜잭션을 사용하여 레코드 삽입

$user = new User(); 
$user->fill(Input::all()); 
$user->save(); 

$profile = new Profile(); 
$user->profile()->save($profile); 
return Response::json(array('message' => 'Your account has been created.')); 

가장 큰 단점 내 코드는 여기에 있습니다 - 내 테이블을 반 프라이드 상태로 유지합니다. 예를 들어 사용자의 레코드가 만들어졌지만 어떤 이유에서든 프로필 레코드를 만드는 동안 문제가 발생하는 경우 사용자는 자신을 위해 프로필이 만들어지지 않은 곳에 존재할 수 있습니다.

이 방법을 피할 수 있습니까? 내가 프로파일의 존재 여부를 확인할 수 있다는 것을 알 수있다. 사용자 프로파일에 접근하려고 시도 할 때 (그리고 프로파일이 생성되지 않았다면 디폴트 값으로 생성한다.)하지만 다른 메소드가 있는지 알고 싶다. 이.

나는 거래가 앞으로 나아갈 수 있다고 믿습니다. 그렇다면 예를 들어 주시겠습니까? 감사

답변

0

현재 트랜잭션을 사용할 수 있습니다

$user = new User(); 
$user->fill(Input::all()); 
try { 
    DB::beginTransaction(); 
    $user->save(); 
    $profile = new Profile(); 
    $user->profile()->save($profile); 
    DB::commit(); 
    return Response::json(array('message' => 'Your account has been created.')); 
} 
catch (QueryException $e) { 
    DB::rollBack(); 
    return Redirect::to('url')->withInput() 
      ->with('error', 'Error occurred. Try again or contact administrator'); 
} 
+0

을 사용할 수 있습니다 .. 감사합니다 :) – Gagan

0

당신은 작동이

$user = new User(); 
$user->fill(Input::all()); 

$profile = new Profile(); 

return DB::transaction(function() use ($user, $profile) { 
    $user->save(); 
    $user->profile()->save($profile); 

    return Response::json(array('message' => 'Your account has been created.')); 
}); 
관련 문제