[SOLUCIONADO ] Consulta para update a dos modelos y varios registros

Hola Comunidad,

expongo el siguiente problema en yii 1.x,

tengo dos modelos personas y direcciones, usando el modelo de personas y con un form guardo en un modelo los datos de las personas y en otro las direcciones postales. Teniendo en cuenta que una persona puede tener más de un tipo de direccion postal, desde personas doy de alta los datos de la persona y su direccion postal principal

el problema lo tengo a la hora de hacer el update ya que no logro obtener el id_direc de la dirección de forma correcta para que se muestre unitariamente con la parte de personas dentro del mismo formulario.

tabla personas

id_personas (PK)

nombre

apellidos

… etc…

tabla direcciones

id_direc (pk)

id_persona (fk)

tipo direccion… etc…

os paso el controlador del update, donde intento buscar en el modelo de direcciones el id_direc y su direccion definida como principal en el tipo_direc =1.




public $persona;

public $tdire;





public function actionUpdate($id)

	{

		$model= new TbPersonas;

                $model_direccion = new TbDirecciones;

                 

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

                

                $persona = $model->ID_PERSONA;

                $tdire = 1;

                                

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

                $sql='Select ID_DIREC

                        FROM tb_direcciones 

                        WHERE  ID_PERSONA = :ID_PERSONA 

                        AND TIPO_DIREC = :TIPO_DIREC';              

                $command=$connection->createCommand($sql);

                $command->bindParam(':ID_PERSONA',$persona,PDO::PARAM_INT);

                $command->bindParam(':TIPO_DIREC',$tdire,PDO::PARAM_INT);

                $command->execute(); 


                $model_direccion = TbDirecciones :: model()-> find($sql);

              

                            

                var_dump($model_direccion, $persona, $tdire);


		// Uncomment the following line if AJAX validation is needed

		$this->performAjaxValidation(array($model,$model_direccion));


		if(isset($_POST['TbPersonas'],$_POST['TbDirecciones']))

		{

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

                        $model_direccion->attributes=$_POST['TbDirecciones'];

                            

                        $model_direccion->ID_PERSONA = $model->ID_PERSONA;

                                                

			$model_direccion->setIsNewRecord(false);

			if($model->save() && $model_direccion->update())

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

		}

		

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

			'model'=>$model,

                        'model_direccion'=>$model_direccion,

                    

		));

	}



Al ejecutar me muestra este error:

CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined. The SQL statement executed was: Select ID_DIREC

FROM tb_direcciones

WHERE ID_PERSONA = :ID_PERSONA

AND TIPO_DIREC = :TIPO_DIREC

Que estoy haciendo mal…

gracias por vuestro tiempo.

** SOLUCIONADO ** ME CONTESTO YO MISMO

En el controller de personas he hecho lo siguiente, he cambiado la Sql por un criteria.





public function actionUpdate($id)

	{

		$model= new TbPersonas;

                $model_direccion = new TbDirecciones;

                 

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

                

                //definidas como publicas 

                $persona = $model->ID_PERSONA;

                $tdire = 1;

               

                                             

                $criteria = new CDbCriteria;

                $criteria->select = "ID_DIREC,ID_PERSONA,TIPO_DIREC,TIPO_VIA,NOMBRE_VIA,RESTO_VIA,COD_POSTAL,LOCALIDAD,PROVINCIA,PAIS";

                $criteria->condition = 'ID_PERSONA = :ID_PERSONA and TIPO_DIREC =:TIPO_DIREC';

                $criteria->params = array (':ID_PERSONA' =>$persona, ':TIPO_DIREC'=>$tdire);

                                     

                

                $model_direccion = TbDirecciones :: model()-> find($criteria);

                

                


		// Uncomment the following line if AJAX validation is needed

		$this->performAjaxValidation(array($model,$model_direccion));


		if(isset($_POST['TbPersonas'],$_POST['TbDirecciones']))

		{

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

                        $model_direccion->attributes=$_POST['TbDirecciones'];

                            

                                                                      

			$model_direccion->setIsNewRecord(false);

			if($model->save() && $model_direccion->update())

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

		}

		

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

			'model'=>$model,

                        'model_direccion'=>$model_direccion,

                    

		));

	}



Como puedo poner el post como SOLUCIONADO.

un saludo.

Para poner el post como solucionado, dirigete a el primer aporte que hiciste en el post y dale editar, al hacer esto podras editar el post inicial, pero selecciona usar Full Editor, este te permite poner solucionado en el titulo del post