Guardar Un Registro Antes De Ser Eliminado

Buen dia

En primera apenas estoy iniciando en este framework y me he topado con muchos problemitas pero de todos he encontrado soluciones, excepto de una de la cual espero puedan apoyarme,

bueno lo que tengo son dos modelos con los mismos campos y modelA y ModelB ambos con los mismos campos, lo que busco es que cuando se llame al action delete del modeloB el registro que se valla a eliminar primero se guarde en el Modelo B

esto es lo que tengo en la acción del controlador del modeloA


	public function actionDelete($id)

	{

		$models=new ModeloB;

		$models=$this->loadModel($id);


		if(Yii::app()->request->isPostRequest)

		{				

		if(isset($_POST['ModeloB']))

		{

			$models->attributes=$_POST['ModeloB'];

			if($models->save())

			$this->loadModel($id)->delete();	

		}

	}

y pues no me esta guardando el registro en el modeloB

espero alguien me pueda ayudar y de antemano muchas gracias

Buenas tarde amigo,

También soy nuevo en el mundo Yii, los conocimientos que he adquirido ha sido "cacharreando" el código que trae Yii por defecto, la lectura y las ayudas del foro. Con respecto a tu problema veo lo siguiente, cuando ingresas al action delete, este llega por el método de envío GET, por consiguiente cuando preguntas:




if(isset($_POST['ModeloB']))

                {

                        $models->attributes=$_POST['ModeloB'];

                        if($models->save())

                        $this->loadModel($id)->delete();        

                }



Nunca entra al save del modelo y nunca ocurre el registro de ese modelo en la tabla de la base de datos.

Hola Aurelio,

Antes que nada, no le veo mucho sentido a guardar un registro que finalmente será eliminado.

Adicionalmente, agregando a lo mencionado por @Juan, cabe mencionar que los datos de actionDelete son procesados bajo las siguientes condiciones:

[list=1][]Llega un campo por GET llamado ‘id’[]El guardado se procesa cuando los datos vienen por POST.[/list]

Saludos.

Buenos días.

Como te dice Juan D., tu problema está en el condicional


if(isset($_POST['ModeloB']))



No tienes nada en $_POST[‘ModeloB’], entonces tu condicional debería ser:




if(!isset($models))

o




if(!empty($models))

Un saludo.

Bueno pues he estado revisando y modificando según los comentarios que se han expuesto y aun no logro guardar el registro, siempre queda vacio, ahora pensandole un poco quizá habrá manera de obtener el registro desde alguna consulta y luego guradarla??

muchísimas gracias por sus comentario y pues esto me servirá para un tipo de borrado lógico, solo el cual había implementado con un campo en la tabla, pero ahora me veo en la necesidad de mover de tabla el registro eliminado

Saludos…

Buenos días.

Entiendo que aquí:




$models=new ModeloB;

$models=$this->loadModel($id);




Has comprobado que te recupere bien los datos.

Entonces una ves q tienes recuperados los datos, un:




$models->save()



Te debería de guardar el registro, al menos q los datos que recoges en


$models

No cumplan las reglas del modelo.

Has comprobado que los datos recogidos en el modelo cumplan las reglas? Puede ser q no se cumpla alguna.

Podrías postear las reglas de tu modelo y los datos de


$models

?

Puedes hacer un var_dump de


$models

Un saludo.

ok por reglas del modelo no creo que sea porque los modelos se podría decir que son idénticos solo cambian en el nombre de la tabla, y si había intentado este método de echo deje el sabe dentro de un if y dentro de este puse el delete y me eliminaba pero no lo guardaba, de todas formas hare una revisión minuciosa del modelo nuevamente, y les cuento que tal, muchísimas gracias en verdad me están ayudando demasiado

esto lo implementas mas facil con trigger mysql vale la pena que intentes los disparadores directamente en la base de datos saludos

Saludos, soy nuevo en esto, pero que tal si en ves de eliminar y crear un respaldo pruebas con agregar un campo mas a la tabla de la base de datos, llamado, por ejemplo “estado” que tengan todos por defecto el valor ‘1’, y en lugar de “Eliminar fisicamente” de la tabla al momento de hacer el delete solo cambias “ese estado = ‘D’” y al realizar la llamada a los datos filtras los que “estado” <> ‘D’, porque tampoco le veo sentido guardar algo y eliminarlo.

Ademas este proceso deberías implementarlo en un disparador (trigger) desde tu gestor de la base de datos, para no cargar la aplicación sino que sea el motor de la base de datos el encargado, es más óptimo.

Hasta pronto

Funcionando al 100 los trigger muchas gracias

hola podrían porfavor ayudarme con este problemita??

http://www.yiiframework.com/forum/index.php/topic/46625-problemas-con-cjuidialog/

de antemano muchas gracias