Hola buen día, tengo la siguiente tabla. La llave primaria es id_proyecto e id_anio
proyecto_t_anio
id_proyecto
id_anio
campo1
campo2
campo3
campo4
Cree un modelo para esta tabla.
Ahora, tengo diseñado, dos pantallas, una que se encarga de llenar los campos 1 y 2 y otra pantalla que llena los campos 3 y 4.
Las preguntas que tengo son:
1.- Cómo le hago para que al presionar el botón de la pantalla 1, se haga insert o update, sólo de los campos 1 y 2, y lo mismo con la pantalla 2, si el registro existe que actualice los campos 3 y 4, sino existe que haga insert sólo de los campos 3 y 4.
2.- De qué manera puedo hacer la validación para determinar si existe o no registro en la tabla, para un id_proyecto e id_anio determinados
Ya lo resolví, aqui pongo el código, hay un par de variables que tienen datos fijos, apenas concluya un amigo su pantalla, los quito, ya que los recibiría como parámetros.
<?php
class RecursosController extends Controller
{
/**
* This is the default 'index' action that is invoked
* when an action is not explicitly requested by users.
*/
public function actionIndex()
{
$idProyecto =$_POST['id_proyecto'];
$idAnio =$_POST['id_anio'];
$idProyecto = 1;
$idAnio = 1;
//Instancia del formulario
//$model=new AprobacionSubcomite();
$model = new ProyectoAnio();
//Verificacion que determina si el usuario presiono el boton de guardar
if(isset($_POST['ProyectoAnio'])){ //Presiono el boton
//Asignacion de los valores al modelo
$model->attributes=$_POST['ProyectoAnio'];
//Guardado de los datos
$this->validarOperacion($idProyecto, $idAnio,$model);
}
$this->render('index',array("listadoSubcomite"=>$this->cargarListadoSubcomite('Subcomite','id_subcomite','nombre'),
"model"=>$model,
"id_proyecto"=>$idProyecto,
"id_anio"=>$idAnio,
"listadoTipoSesion"=>$this->cargarListadoSubcomite('TipoSesion','id_tipo','nombre'),
"listadoNumSesion"=>$this->cargarListadoSubcomite('NumeroSesion','id_numero','nombre')));
}
private function cargarListadoSubcomite($modelo,$campoId,$campoDescripcion){
return CHtml::listData($modelo::model()->findAll(),$campoId,$campoDescripcion);
}
private function validarOperacion($idProyecto,$idAnio,$model){
if($model->validate()){
$registro = ProyectoAnio::model()->findByAttributes(array("id_proyecto"=>$idProyecto,
"id_anio"=>$idAnio));
if($registro===null){
$this->insertAction($model);
}
else{
$this->updateAction($registro,$model);
}
}
}
public function updateAction($registro,$model){
$registro->attributes=array('id_subcomite'=>$model->id_subcomite,
'id_tipo_sesion'=>$model->id_tipo_sesion,
'id_numero_sesion'=>$model->id_numero_sesion,
'minuta'=>$model->minuta,
'ruta_minuta'=>$model->ruta_minuta);
$registro->save();
}
public function insertAction($model){
$model->save();
}
/**
* This is the action to handle external exceptions.
*/
public function actionError(){
if($error=Yii::app()->errorHandler->error)
{
if(Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}
}
Si se puede mejorar el código, adelante, son bienvenidas las sugerencias.