Accion Create Y Update Con Tablas Vinculadas

Hola a todos, y gracias por adelantado por las respuestas!!

Mi pregunta es la siguente como puedo actualizar o "cargar el dato INDICE FORANEO persona_id" en una tabla hija

digamos que tengo una tabla "personas" y una tabla "beneficios" cuyo indice que vincula la tabla beneficios a personas es "persona_id", el CRUD me genero el FORM pero tengo que entrarlo a mano, pero yo necesito cargar ese dato en forma automatica, ya que ese dato ya lo tengo por parametro desde la pantalla anterior.

desde ya muchas gracias

En el controlador de "beneficio", modifica la acción create (si es esa) para que se cree el modelo Beneficio con el "persona_id" que desees, así.


public function actionCreate() {

		$model = new Beneficio;

                $model->persona_id = '1'; //el parametro que mensionabas 


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

			$model->setAttributes($_POST['Beneficio']);


			if ($model->save()) {

				if (Yii::app()->getRequest()->getIsAjaxRequest())

					Yii::app()->end();

				else

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

			}

		}


		$this->render('create', array( 'model' => $model));

	}



Espero que sea lo que buscabas.

Dependiendo de lo que quieras hacer voy dar 2 alternativas. pero igual mente algo para tener donde ir a sacarse las dudas

1.- Canal de youtube de Gustavo Salgado en español sigue creciendo con sus aporte

2.- repositorios de Gustavo muy bueno y con ejemplo de los videos

3.- Existe varias Extensiones ami me gusta multimodelform viene con sus explicación

Bueno vasta de esto y vamos una forma que creo te puede servir si tu ya tienes ingresados desde ante a las Personas, En este caso se pueden traer con funciones autocompletar o dropsown.

1.- Buscar la function relacions en el modelo Beneficios y comprovar que existe relacion como la que se indica si no crearla




public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		'persona' => array(self::BELONGS_TO, 'Persona', 'persona_id'),

		);

	}



2.- crear el codigo autocompletar en el modelo Persona




public function suggest($keyword,$limit=20)

	{

		$models=$this->findAll(array(

			'condition'=>'nombres LIKE :keyword',

			'order'=>'persona_id',

			'limit'=>$limit,

			'params'=>array(':keyword'=>"%$keyword%")

		));

		$suggest=array();

		foreach($models as $model) {

			$suggest[] = array(		

				'label'=>$model->nombres.' - '.$model->paterno.' - '.$model->materno,			

                 'value'=>$model->nombres, // value for input field

                 'id'=>$model->persona_id, // return values from autocomplete

				 'paterno'=>$model->paterno,

				 'materno'=>$model->materno,

				

			);

		}

		return $suggest;

	} 



//dropdown persona para algo te puede servir




public static function getListInvestigador()

	{

		return CHtml::listData(Persona::model()->findAll(array('order'=>'paterno')),'persona_id','concatened');



}

/concatenacion delos campos***/


	

public function getConcatened()

    {

        return $this->nombres.' '.$this->paterno.' '.$this->materno;

    }



3.- Ahora como utilizarlos ir protected/view/benercios

cambiar parametros "persona_id"

_form




<?php  echo $form->dropDownList($model,'persona_id',CHtml::listData(

		Persona::model()->findAll(array('order'=>'paterno')),

		'persona_id','concatened'),array('empty'=>'Seleccione Persona'));?> 



_view "persona_id"




<?php echo CHtml::encode($data->persona->nombres." ".$data->persona->paterno); ?>



admin

en el "persona_id" remplazar por el array




array(

		'name'=>'persona_id',

		'value'=>'$data->persona->nombres. " " .$data->persona->paterno. " " .$data->persona->materno',

		'htmlOptions'=>array('style'=>'text-align: left','width'=>'90px'),

		'type'=>'text',

		),



view

cambiar "persona_id" en dentro del widget




'persona.nombres', //'nombre_de_la_tabla.campo_mostrar'



Bueno espero que este aporte sirva para varios y cualquier consulta primero ver los videos :) bajar los ejemoplo y despues consultar jajaja

Hola gracias a todos por las respuestas, tarde algo en volver al foro, ya que estuve atareado con otro tema.

pude solucionar el problema pasando el dato como parametro en el controller y en el view asignarlo a un campo hidden, esto me soluciono el problema!!

<?php echo CHtml::activeHiddenField($model,‘persona_id’); ?>

en este caso persona_id actua solo como dato, aunque en realidad es un indice, ni aparece visible, solo debe grabarse el dato.

y la data aparece automaticamente actualizada de modo que no tengo error al hacer el save

no se si es la forma correcta de hacerlo pero a mi me funciono de 10

bueno escucho comentarios, al respecto, Saludos a todos