Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9136539
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 17, 20262026-06-17T08:57:57+00:00 2026-06-17T08:57:57+00:00

Is there a way to add an action to a CDbConnection when rollback action

  • 0

Is there a way to add an action to a CDbConnection when rollback action is called ?

I have this code and it works :

$transaction = $model->dbConnection->beginTransaction();

try {
    //...
    //doing some manipulations
    //...

    if($model->save()) {
        $transaction->commit();
        $this->redirect(array('view','id'=>$model->id));
    }

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

Is there a way reverting the manipulations done when the $transaction->rollback(); is called without putting this code in the catch statement, like adding an event on the transaction rollback function.

Maybe there’s a workaround with Behaviours and Events, but I’m not sure how it works.

Thanks!

EDIT – What I want to do is this:

When the model fail to save, there will be a rollback on the database, but I’m doing some manipulations on the files too (that I need to do before validating & saving the model), so if the model fail to save because of the validation, I need to revert theses changes to the files.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-17T08:57:58+00:00Added an answer on June 17, 2026 at 8:57 am

    currently CDbTransaction does not have any events defined.

    What I would do, is create class that will handle this logic in a way you can reuse:

    //protected/components/AtomicTransformation.php
    <?php
    class AtomicTransformation {
      private $_model;
      private $_transaction;
      public function __contruct(CModel $model)
      {
        $this->_model = $model;
        $this->_transaction = $model->dbConnection->beginTransaction();
      }
      public function commit()
      {
        $this->_transaction->commit();
      }
      public function rollback( /* pass any params you need for your revert logic */)
      {
        // Do your revert logic here
        $this->_transaction->rollback();
      }
    }
    
    $transformation = new AtomicTransformation($model);
    
    try {
        //...
        //doing some manipulations
        //...
    
        if($model->save()) {
            $transformation->commit();
            $this->redirect(array('view','id'=>$model->id));
        }
    
    } catch(Exception $e) {
        $transformation->rollback( /*your params */ );
        throw $e;
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Is there a way to add/override the action event of THIS button ? I
I created this regular expression to validate names: ^[a-zA-Z0-9\s\-\,]+.\*?$ Is there a way add
Is there a way to add custom template inside Telerik MVC Combobox.? I have
In Ruby on Rails, is there a way to add another RESTful action to
is there any way to add a custom contextual action bar when text is
Is there a way to add the ActiveMQ component via javacode in Spring's applicationConfig
Is there a way to add a daily total to a graph made with
Is there a way to add the select-result on the url when the pop
Is there a way to add a progress bar in the footer (fbar) of
Is there a way to add a text-shadow in CSS that is similar to

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.