Actualizar 2 Tablas Desde El Modulo De Actualizacion

Mi pregunta es para actualizar 2 o mas tablas desde el modulo de actualización porque ya lo hice insertando en 2 modelos (Tablas), en el modulo de inserción y también visualizo la información si hay datos a partir de las relaciones, pero puntualmente quiero mostrar los datos de la segunda tabla y su vez actualizar la información de la segunda tabla desde el modulo de actualización.

¿Podría por favor colocar datos de ejemplo para ser más explícitos y comprender lo que desea?

Creo que no he comprendido la pregunta :(

Saludos.

Clase Controller Tabla1

class Tabla1Controller extends Controller {

/* 


 En el método Create (actionCreate) ya estoy haciendo la insercion en las 2 tablas (Tabla1, Tabla2).


*/


public function actionCreate() {


	$model=new Tabla1;





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


	{


		$model->attributes=$_POST['Tabla1'];


		if($model->save()){


			$modelTabla2 = new Tabla2;


            $modelTabla2->attributes = $_POST['Tabla2'];


            $modelTabla2->tabla1_id = $model->id;


            if ($modelTabla2->save())


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


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


		}


	}





	$this->render('create',array(


		'model'=>$model,


	));


}





/* 


  [b]Mi pregunta es como mostrar la información de la Tabla2 en el formulario (Actualización) 


	y en el metodo update (actionUpdate($id)) hacer la actualización de las 2 tablas: Tabla1, Tabla2.[/b]


*/

#Asi pienso que es pero no funciona.

public function actionUpdate($id)


{


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


      $modelTabla2=Tabla2::model()->find('tabla1_id=?',array($id));





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


	{


		$model->attributes=$_POST['Tabla1'];


		if($model->save()){


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


			$modelTabla2->attributes=$_POST['Tabla2'];


			if($modelTabla2->save())


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


		}


	}





	$this->render('update',array(


		'model'=>$model,


                     'modelTabla2'=$modelTabla2,


	));


}

}

Luce bien, podría publicar la vista?

Pregunto: está saliendo algún error? o simplemente no muestra los datos?

Actualmente se están almacenando los datos correctamente (aunque no se muestren)

Gracias por tu interés Ricardo, actualmente en el modulo de Actualización:

No esta presentando error.

Pero no esta mostrando los datos.

Tampoco se esta almacenando (no actualiza los datos en la Tabla2).

Mas tarde publico la vista.

//Vista




<?php

$this->breadcrumbs=array(

	'Tabla1'=>array('index'),

	$model->id=>array('view','id'=>$model->id),

	'Update',

);


$this->menu=array(

	array('label'=>'List Tabla1','url'=>array('index')),

	array('label'=>'Create Tabla1','url'=>array('create')),

	array('label'=>'View Tabla1','url'=>array('view','id'=>$model->id)),

	array('label'=>'Manage Tabla1','url'=>array('admin')),

);

?>


<h1>Update Tabla1 <?php echo $model->id; ?></h1>


<?php echo $this->renderPartial('_form',array('model'=>$model),array('modelTabla2'=>$modelTabla2)); ?>



Si no te da error, supongo que será por las reglas.

Para el save de la Tabla 2 haz:




if(!$modelTabla2->save())

{

 var_dump($modelTabla2->getErros());

 exit;

}



A ver que te muestra.

Se me ocurre agregar en la vista "_form" las siguientes líneas:




echo CHtml::errorSummary($model);

echo CHtml::errorSummary($modelTabla2);



Así podemos saber si e está produciendo un error en el guardado.

Buenas nuevas foro, habemus un avance Rodrigo, ya actualiza la información en el tabla2, aunque aun no me muestra la información en el formulario a editar (Como hago para mostrar los datos en la tabla2), el error era:

#Clase Tabla1Controller extends Controller -> Metodo update




public function actionUpdate($id){

	$modelTabla2 = new Tabla2; #Se creo instancia de la Tabla2

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

	$modelTabla2=Tabla2::model()->find('tabla1_id=?',array($id));


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

		$model->attributes=$_POST['Tabla1'];

		if($model->save()){

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

			$modelTabla2->attributes=$_POST['Tabla2'];

			$modelTabla2->tabla1_id = $model->id; #Se envia el id de Tabla1

			if($modelTabla2->save())

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

		}

	}

	$this->render('update',array(

	'model'=>$model,

	'modelTabla2'=$modelTabla2,

	));

}



creo que se refiere a que automaticamente le sea generado un mecanismo maestro detalle.

si este es el caso, aqui podrias conseguir parte de la ayuda:

http://www.yiiframeworkenespanol.org/index.php?r=site/ejemplos&modulo=demo1

A continuación voy a explicar como solucione la actualización en las 2 o mas tablas:

La relación que existe entre tabla1 y tabla2 es uno a uno. Por esa razón no era aplicable la solución expuesta en la ultima replica, como tampoco fue aplicable el la extension multimodelform, la cual tambien estudie.

Controller




public function actionUpdate($id){

        $modelTabla2 = new Tabla2; #Se creo instancia de la Tabla2

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

        $modelTabla2=Tabla2::model()->find('tabla1_id=?',array($id));


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

                $model->attributes=$_POST['Tabla1'];

                if($model->save()){

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

                        $modelTabla2->attributes=$_POST['Tabla2'];

                        $modelTabla2->tabla1_id = $model->id; #Se envia el id de Tabla1

                        if($modelTabla2->save())

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

                }

        }

        $this->render('update',array(

        'model'=>$model,

        'modelTabla2'=$modelTabla2,

        ));

}



Update

<?php echo $this->renderPartial(’_form’,array(‘model’=>$model,‘modeltabla2’=>$modeltabla2)); ?>

Dependediendo de los campos que quieras crear/actualizar de la tabla2

Form


<?php echo $form->textFieldRow($model->isNewRecord ? tabla2::model() : $modeltabla2,'campo1',array('class'=>'span5','maxlength'=>200)); ?>


<?php echo $form->textFieldRow($model->isNewRecord ? tabla2::model() : $modeltabla2,'campo2',array('class'=>'span5','maxlength'=>100)); ?>

Cabe aclarar que este formulario fue creado con el modulo bootstrap para yii.