Sql Reverso - Log

Olá a todos!!

Ainda estou começando a caminhar no yii e espero em breve poder ajudar também aqui…

Estou com uma dúvida, no desenvolvimento do administrativo estamos criando um log de alterações (até estamos usando o audittrail que usa behavior), mas algumas funções o audittrail não tem e acho que seria melhor implementar no before(Delete,update,insert).

Quando a pessoa executa uma ação, por exemplo: Deletar o item de id 5.

Existe uma forma de no beforeDelete da model eu gerar um SQL inverso? seria por exemplo um SQl de inserção desse mesmo registro e gravar esse sql no banco? pois dai teriamos a opção de "reverter" uma alteração feita pelo usuário…

Olá Estevão!

Acredito que vc pode fazer da seguinte forma:

Crie o modelo dessa tabela que irá armazenar os registros excluídos.

Se vc achar que não é necessário criar um modelo para a tabela que armazena os registros excluídos execute o comando SQL manualmente. Veja como em: CDbConnection.

Ex.:


protected function beforeDelete(){

//com modelo

$model = new TabelaQueArmazenaOsExcluidos;

$model->registro = $this->registros;//aqui é com vc...

$model->save();


//sem modelo

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

$conexao->active = true;

$comando=$conexao->createCommand($sqlStatement);

$comando->execute(); 

}

Abraço. Flw!

Obrigado pela rápida resposta!

Mas minha dúvida é a seguinte na verdade… (irei criar a model que vai registrar essas mudanças sim).

Mas é possível pelo yii gerar uma query de insert de um item?

Por exemplo:

tb aluno ->Campo id,nome,data_nascimento

O cliente solicita deletar o id 25.

Antes de deletar eu pego todos os dados do id 25 e gero um insert.

Gostaria de saber se o yii tem algo para gerar a query ou se preciso gerar manualmente.

Pensei se existisse algo no yii que me retornasse o insert da linha 25 seria INSERT INTO aluno values(aqui os values)

Por que ai conseguiria fazer uma coisa mais genérica em todo o sistema.

Obrigado!

eestevao,

Tem uma extensão que você consegue pegar o SQL gerado:

http://www.yiiframework.com/extension/cthesql/

Antes de remover o item, pega o ID do item a ser deletado e faz uma consulta assim usando a extensão:


$excluded = Aluno::model()->findByPk($_GET["id"]);

$sql = $model->getSql($excluded);


$model = new TabelaAmarzenada;

$model->registro = $sql;

if($model->validate()){

    $model->save();

    $excluded->delete();

}

Newerton

Muito obrigado!! vou fazer uns testes e dou um retorno se funcionou!