Que tal amigos del foro!!! es un gusto saludarlos.
¿Como puedo guardar los datos editados en un CGridView (obviamente ya tengo las columnas con textfield y algunos checkbox)de un conjunto de campos que realizo en una consulta? Se requiere guardarlas en dos tablas diferentes.
La tabla 1 se llama miembros
La tabla 2 se llama asistencia
La tabla 3 se llama detalleslista
Lleno el CGridView con datos de la tabla miembro (solo tres datos)
Por cada miembro que exista en la base de datos, en el CGridView le agrego otras columnas que serán editables
Al guardar necesito que recorra el CGridView y los guarde tanto en la tabla asistencia como detalleslista
¿Como puedo guardar los datos editados en un CGridView (obviamente ya tengo las columnas con textfield y algunos checkbox)de un conjunto de campos que realizo en una consulta? Se requiere guardarlas en dos tablas diferentes.
La tabla 1 se llama miembros
La tabla 2 se llama asistencia
La tabla 3 se llama detalleslista
Lleno el CGridView con datos de la tabla miembro (solo tres datos)
Por cada miembro que exista en la base de datos, en el CGridView le agrego otras columnas que serán editables
Al guardar necesito que recorra el CGridView y los guarde tanto en la tabla asistencia como detalleslista
No tienes q recorrer tu CGridView. En principio lo que tendrás serán arrays de controles, con lo que entiendo que cuando hagas el POST enviarás un array de los modelos correcpondientes.
Entonces en $_POST tendrás arrays con todos los datos, recorres esos arrays y listo.
Muchas gracias lagogz, tengo la duda, en cuanto a enviar todas esas variables, mediante un array, como asignarle el valor en cada control para después por medio de un array enviarlo al controlador y guardarlo en la base de datos.
Muchas gracias lagogz; si no es mucho pedir, habrá algún ejemplo sobre lo que comentas. Array de controles, buscando en este foro no encontré alguno. De todos modos, te agradezco por la información.
Como ves, hay 2 cajas de texto para un mismo atributo de un modelo, pero he establecido su name como un array mediante los corchetes.
En el momento en el que se envíe el formulario, el action correcpondiente va a recibir un array llamado "nombreCampo" que tendrá todos como elementos todos los valores de las cajas que se llamen de igual forma. Entonces tienes que recorrer ese array, y guardar los valores donde corresponda.
public function actionCreate()
{
$model=new listaasistencia;
$member=new miembros;
$detalle=new detallelista;
$var="No";
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['miembros']))
{
$var="Si";
$member->attributes=$_POST['miembros'];
$id = $member->idMiembro;
}
if(isset($_POST['listaasistencia'], $_POST['detallelista']))
{
$model->attributes=$_POST['listaasistencia'];
//$member->attributes=$_POST['miembros'];
$detalle->attributes=$_POST['detallelista'];
$this->render('create',array(
'model'=>$model,'member'=>$member,'detalle'=>$detalle));
//Vamos a comentar estas lineas de codigo para ver lo que nos está enviando
//if($model->save())
//$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,'member'=>$member,'detalle'=>$detalle,'var'=>$var
));
}
El problema es que no me envia nada al recibir en el $_POST del controlador en la accion create.
Aun sigo sin poder recibir los datos en el Controller
public function actionCreate()
{
$model=new listaasistencia;
$member=new miembros;
$detalle=new detallelista;
$var="";
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['listaasistencia'], $_POST['member'], $_POST['detallelista']))
{
$model->attributes=$_POST['listaasistencia'];
$member->attributes=$_POST['member'];
$detalle->attributes=$_POST['detallelista'];
$var = "si recibe los datos";
$i=1;
$id = $member->idMiembro;
$this->render('create',array(
'model'=>$model,'member'=>$member,'detalle'=>$detalle, 'var'=>$var, 'id'=>$id));
//Vamos a comentar estas lineas de codigo para ver lo que nos está enviando
//if($model->save())
//$this->redirect(array('view','id'=>$model->id));
}
else{
$this->render('create',array(
'model'=>$model,'member'=>$member,'detalle'=>$detalle,'var'=>$var
));
}
}
Hice un if(isset()) para cada modelo, y si entra a ese if me imprime una variable que si está recibiendo
datos de los controles, pero como puedo obtener los valores <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />
Mi formulario quedó así:
De esta forma envío un arreglo multidimensional, para que sepa a que idMiembro pertenece cada control.
y en mi controlador tengo lo siguiente:
if(isset($_POST['listaasistencia'], $_POST['detallelista']))
{
//Atributos del modelo tabla contlistaasistencia
$model->attributes=$_POST['listaasistencia'];
$model->fecha= date("Y-m-d H:i:s");
$array_detallelista=$_POST['detallelista'];
if($model->save())
$lastId = $model->primaryKey; //Obtenemos el id insertado
foreach($array_detallelista as $id=>$array)
{
$detalle->idMiembro=$id;
$detalle->id=$lastId;
$detalle->asistencia=$array[0];
$detalle->cuota=$array[1];
$detalle->estatus_cuota=$array[2];
$detalle->biblia=$array[3];
$detalle->anio_biblico=$array[4];
$detalle->participacion=$array[5];
$detalle->uniforme=$array[6];
$detalle->save();
}
$this->render('create',array(
'model'=>$model,'member'=>$member,'detalle'=>$detalle,'detail'=>$array_detallelista));
//Vamos a comentar estas lineas de codigo para ver lo que nos está enviando
//if($model->save())
//$this->redirect(array('view','id'=>$model->id));
}
Por si alguien llegará a necesitar este tipo de guardar datos de un CGridView