Usar Un Campo Para Llenar El Id De Dos Tablas

he estado buscando como poder llevar un dato a 2 modelos y eso no lo he podido encontrar hasta el momento.


<?php echo $form->errorSummary(array($model, $model_personanatural)); ?>


	<div class="row">

		<?php echo $form->labelEx($model,'NOMBRE'); ?>

		<?php echo $form->textField($model,'NOMBRE',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo $form->error($model,'NOMBRE'); ?>

	</div>

	

	<div class="row">

		<?php echo $form->labelEx($model,'TIPO'); ?>

		<?php echo $form->dropDownList($model,'TIPO',$model->getTipo()); ?>

		<?php echo $form->error($model,'TIPO'); ?>

	</div>

	

		<div class="row">

		<?php echo $form->labelEx($model_personanatural,'ID'); ?>

		<?php echo $form->textField($model_personanatural,'ID'); ?>

		<?php echo $form->error($model_personanatural,'ID'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model_personanatural,'APATERNO'); ?>

		<?php echo $form->textField($model_personanatural,'APATERNO',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo $form->error($model_personanatural,'APATERNO'); ?>

	</div>


		<div class="row">

		<?php echo $form->labelEx($model_personanatural,'AMATERNO'); ?>

		<?php echo $form->textField($model_personanatural,'AMATERNO',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo $form->error($model_personanatural,'AMATERNO'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model_personanatural,'NACIMIENTO'); ?>

		<?php echo $form->textField($model_personanatural,'NACIMIENTO'); ?>

		<?php echo $form->error($model_personanatural,'NACIMIENTO'); ?>

	</div>

	

en el form tengo esto, donde defini que el form se pueda enviar a 2 modelos. tambien agregue el modelo en el view create. y en el controller de persona tengo esto


	public function actionCreate()

	{

		$model=new Persona;

		$model_personanatural=new PersonaNatural;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Persona'], $_POST['PersonaNatural']))

		{

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

			$model_personanatural->attributes=$_POST['PersonaNatural'];

			if($model->save())

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

		}


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

			'model'=>$model,

			'model_personanatural'=>$model_personanatural,

		));

	}

la idea es poder hacer que el campo ID del form, se agregue a la tabla persona como a la tabla personaNatural.

hasta el momento solo llena la tabla persona y personaNatural queda con los campos vacios. espero puedan ayudarme :B

Hola, para grabar los 2 modelos:




if(isset($_POST['Persona'], $_POST['PersonaNatural']))

{

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

    $model_personanatural->attributes=$_POST['PersonaNatural'];

    $model_personanatural->id_enlace = 1; //seguramente necesites poner un valor para que valide el modelo.

    if($model->validate() && $model_personanatural->validate())

    {

        $model->save(false);

        //al grabar $model existe $model_>ID entonces pones el valor correcto del id_enlace

        $model_personanatural->id_enlace = $model->ID;

        $model_personanatural->save(false);

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

    }

}



saludos

muchas gracias me sirvio bastante tu codigo. al final quedo asi el actionCreate, donde puedo ingresar el id ya guardado del modelo persona para incluirlo en personanatural


	public function actionCreate()

	{

		$model=new Persona;

		$model_personanatural=new PersonaNatural;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Persona'], $_POST['PersonaNatural']))

		{

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

			$model_personanatural->attributes=$_POST['PersonaNatural'];

			if($model->save()){

				$model_personanatural->ID = $model->ID;

				if($model_personanatural->save()){

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

				}

			}

		}


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

			'model'=>$model,

			'model_personanatural'=>$model_personanatural,

		));

	}


$model->save();

es equivalente a:


$model->validate();

$model->save(false);



En la accion que has puesto se valida $model y si cumple las rules se guarda.

Luego haces lo mismo para $model_personanatural, y si aqui no valida las rules no se guardará.

Es por eso que se validan todos los modelos 1º y luego se guardan en el orden que necesitemos.

En tu caso $model es el modelo principal, lo guardas 1º.

$model_personanatural puede requerir el campo PK del modelo $model, lo cambia ahora y lo guardas.

Los guardas con $model->save(false);, para indicar que no necesitan validarse porque se hizo anteriormente.

Si uno de los 2 modelos no cumple las rules no se guardará ninguno de los 2, que es lo normal.

Lo del campo id que mencionas, en principio el campo id es autoincremental en BBDD luego solo necesitas pasarselo al modelo $model_personanatural, pero no a su ID si no a ID_persona (la FK que los relaciona)




$model_personanatural->id_persona = $model->id;



No se si lo explico bien, pregunta si algo no te queda claro o yo lo he entendido mal.