Symfony로 Doctrine을 사용하여 여러 모델/테이블에서 특정 작업 집합을 수행하려고합니다. 여기에 내가 뭘하는지입니다 : 그러나Symfony/Doctrine : 여러 객체/함수가 포함 된 트랜잭션
public function myFunc()
{
$conn = Doctrine_Manager::connection();
try {
$conn->beginTransaction();
$prop_trans->save($conn);
self::doSomething1($conn);
$bill_appor->save($conn);
// Final Committ
$conn->commit();
return $prop_trans;
} catch (Exception $exc) {
if ($conn)
$conn->rollback();
throw $exc;
}
}
public function doSomething($conn)
{
$obj = new Trans();
// this function might create & save another child record
$obj->doSomething2($conn);
$obj->save($conn);
}
예외 (코드 또는 데시벨 수준)이있을 때, 나는 어떤 기록이 저장되는 것을 볼로 롤백이 작동하는지 궁금합니다.
필자는 연결을 열고 트랜잭션을 시작한 후 연결 $ conn을 사용하는 모든 메서드가 동일한 트랜잭션에서 실행되고 있음을 이해합니다. 무언가가 실패하면 모두 롤백합니다.
세이브 포인트를 사용해 보았지만 작동하지 못했습니다. 연결을 전달하면 모든 것이 트랜잭션을 실행하기에 충분하다는 것을 다른 사람이 알려줄 수 있습니까? MySQL auto_committ 속성이 설정 되었기 때문입니까? 감사합니다.
코드는 더 많거나 적은 의사 코드, 그래서 PL 오류를 무시, 정적으로 호출되는 객체 메소드와 같은 것 – Prasad