Transaction

Estou seguindo este tutorial http://www.yiiframework.com/doc/guide/1.1/pt_br/database.dao

Estou recebendo sempre "[i]Error 500

CDbTransaction está inativo e não pode realziar as operações commit ou roll back.[/i]" no meu actionCreate.

Vejam o trecho do código:




    public function actionCreate() {


        $modelPessoa = new Pessoa;

        $modelPessoaFisica = new PessoaFisica;

        $modelTelefone = new Telefone;

        $modelEmail = new Email;

        $modelEndereco = new Endereco;





        // Uncomment the following line if AJAX validation is needed

        $this->performAjaxValidation(array($modelPessoa, $modelPessoaFisica, $modelTelefone, $modelEmail, $modelEndereco));


        if (isset($_POST['Pessoa'])) {

            $modelPessoa->attributes = $_POST['Pessoa'];

            $modelPessoaFisica->attributes = $_POST['PessoaFisica'];

            $modelTelefone->attributes = $_POST['Telefone'];

            $modelEmail->attributes = $_POST['Email'];

            $modelEndereco->attributes = $_POST['Endereco'];


            $valid = $modelPessoa->validate();

            $valid = $modelPessoaFisica->validate() && $valid;

            $valid = $modelTelefone->validate() && $valid;

            $valid = $modelEmail->validate() && $valid;

            $valid = $modelEndereco->validate() && $valid;


            if ($valid) {

                $connection = Yii::app()->db;

                $connection->active = true;

                $transaction = $connection->beginTransaction();


                try {                   

                    $connection->createCommand($modelPessoa->insert());

                    

                    $modelPessoaFisica->id_cadastro_pessoa = $modelPessoa->primaryKey;

                    $modelTelefone->id_cadastro_pessoa = $modelPessoa->primaryKey;

                    $modelEmail->id_cadastro_pessoa = $modelPessoa->primaryKey;

                    $modelEndereco->id_cadastro_pessoa = $modelPessoa->primaryKey;

                    

                    $connection->createCommand($modelPessoaFisica->insert());

                    $connection->createCommand($modelTelefone->insert());

                    $connection->createCommand($modelEmail->insert());

                    $connection->createCommand($modelEndereco->insert());

                    $transaction->commit();

                    Yii::app()->user->setFlash('success', Yii::app()->getParams('MESSAGE_SUCCESS'));

                    $this->redirect(array('view', 'id' => $modelPessoa->id));

                } catch (Exception $e) {

                    $transaction->rollback();

                    Yii::app()->user->setFlash('error', "{$e->getMessage()}");

                }

            }

        }

Que banco de dados você está usando? O MySQL suporta transações somente com uns tipos de formatos. Se não me engano, as transações funcionam com tipos InnoDB

Estou usando MySQL com InnoDB mesmo :confused:

Verifique se sua transação está ativa:


 

 $transaction = $connection->beginTransaction();

$verifica = $connection->getActive()==TRUE ? "Transação ativa" : "Transação desativada";  

echo $verifica;



Faça o teste também da transação diretamente na sua base de dados para ver se não é algo relacionado com seu banco.

é… eu não sei o que houve, talvez uma tabela não estivesse com InnoDB e eu tenha alterado sem perceber.

De qualquer forma, agora está funcionando perfeitamente.

Agradecido pelo apoio

:D