0

ここに画像の説明を入力次のコードがあり、データを渡して例外を生成し、トランザクションのロールバックが発生しているかどうかをテストします。そうではないようで、その理由はわかりません。誰かが私を助けることができますか?ありがとう

            $transaction = Yii::app()->db->beginTransaction();

            try {

                //.....

                //call private methods
                $category = MyController::saveCategory($params);
                $test_saved = MyController::saveTest($params);
                MyController::saveCommunity($param);   // here is an exception and it should rollback the transaction but it doesn't  

                $transaction->commit();

            } catch(Exception $e) {
                $transaction->rollback();
                throw new Exception($e);
            }


            private function saveCommunity($param){

                  $community = new Community();
                  $community->user_id = $user_id;
                  $community->name = $name; 
                  $community->id = 71;  // this is a duplicate primary key and will generate an exception


                  try{
                      $community->save(false, null);
                  }catch(Exception $e){
                     throw $e;
                  }

                  return $community;

            }

(mysql テーブルは innodb に設定されています)

4

2 に答える 2

0

デフォルトでは、pdo は例外をスローせず、エラーを無視します。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
于 2013-05-02T15:02:27.517 に答える
0

例外のスローを担当するコードを変更してみてください。

          try{
              $community->save(false, null);
          }catch(Exception $e){
             throw $e;
          }

次のようなものに:

          if(!$community->save(false, null))
               throw new Exception('Error saving');

ここでスローする例外を削除します。

            } catch(Exception $e) {
            $transaction->rollback();
            //throw new Exception($e);
        }
于 2013-05-02T15:04:10.013 に答える