Hola comunidad,
soy newbee estoy comenzando Yii desde hace unos meses, siguiendo varios ejemplos de rellenar varios modelos desde un mismo formulario me encuentro con el siguiente problema.He revisado ejemplos y no sé que puede estar pasando.
tengo la siguiente base de datos de ejemplo.
Tb_nino
ID_NINO (PK)
NOMBRE
TB_PADRES
ID (PK)
N_PADRE
N_MADRE
ID_NINO (FK)
Estoy usando el formulario update de la vista de Nino para guardar la información de los padres. El create me funciona correctamente, pero el update es donde tengo las dudas y problemas, al actualizar el formulario primero me muestra el nombre correcto del niño pero los nombres de los padres corresponden al registro anterior guardo de la tabla padres. Cuando actualizo de los padres la información esta no la guarda en la tabla o si no me muestra un error, si actualizo la de nino si se guarda.
Los controladores
public function actionCreate()
{
$model= new TbNino;
$model_padres=new TbPadres;
$this->performAjaxValidation(array($model,$model_padres));
if(isset($_POST['TbNino'],$_POST['TbPadres']))
{
$model->attributes=$_POST['TbNino'];
$model_padres->attributes=$_POST['TbPadres'];
$sql='select max(ID_NINO) as maximo from tb_nino;';
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$row=$command->queryRow();
$row["maximo"]++;
$model_padres->ID_NINO=$row["maximo"];
$model->ID_NINO=$row["maximo"];
if($model->save() && $model_padres->save()) $this->redirect(array('view','id'=>$model->ID_NINO));
}
$this->render('create',array(
'model'=>$model,
'model_padres'=>$model_padres,
));
}
public function actionUpdate($id)
{
$model=new TbNino;
$model_padres=new TbPadres;
$this->performAjaxValidation(array($model,$model_padres));
$model=$this->loadModel($id);
//$model_padres = TbPadres:: model()->findByPk($model->ID_NINO);
if(isset($_POST['TbNino'],$_POST['TbPadres']))
{
$model->attributes=$_POST['TbNino'];
$model_padres->attributes=$_POST['TbPadres'];
$model_padres->ID_NINO = $model->ID_NINO;
$model_padres->setIsNewRecord(false);
if($model->save() && $model_padres->update())
$this->redirect(array('view','id'=>$model->ID_NINO));
}
$this->render('update',array(
'model'=>$model,
'model_padres'=>$model_padres
));
}
Y el formulario _FORM
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'tb-nino-form',
'enableAjaxValidation'=>true,
));
if($model->isNewRecord==false){
//$model = TbNino:: model()->findByPk($model->ID_NINO);
$model_padres = TbPadres:: model()->findByPk($model->ID_NINO);
} else
{
echo $form->errorSummary(array($model,$model_padres));
}
?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<div class="row">
<?php echo $form->labelEx($model,'NOMBRE'); ?>
<?php echo $form->textField($model,'NOMBRE',array('size'=>50,'maxlength'=>50)); ?>
<?php echo $form->error($model,'NOMBRE'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model_padres,'Nombre_padre'); ?>
<?php echo $form->textField($model_padres,'Nombre_padre',array('size'=>50,'maxlength'=>50)); ?>
<?php echo $form->error($model_padres,'Nombre_padre'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model_padres,'Nombre_madre'); ?>
<?php echo $form->textField($model_padres,'Nombre_madre',array('size'=>50,'maxlength'=>50)); ?>
<?php echo $form->error($model_padres,'Nombre_madre'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
en en update.php
<?php $this->renderPartial('_form', array('model'=>$model,'model_padres'=>$model_padres)); ?>
Gracias por vuestro tiempo.
Cuando borro un registro de la tabla de niño y se produce un decalaje en la secuencia de ID_NINO En la tabla de padres, al consultar el siguiente registro me muestra este error, pero solo en algunos registros.
Fatal error: Call to a member function isAttributeRequired() on a non-object in C:\wamp\www\yii\framework\web\helpers\CHtml.php on line 1414