在项目开发中经常会遇到只有一个表单但是你要存诸数据写进2个表。
例如,用户注册的表单,登录信息和身份信息就应该写进2个表!
这个要如何写呢,下面我们看控制器的代码:
public function actionCreate()
{
$modelA = new User;//实例化模型A
$modelB = new Profile;//实例化模型B
if(isset($_POST['User']) && isset($_POST['Profile']))//判断用户数据与身份信息
{
$modelA->attributes=$_POST['User'];
$modelB->attributes=$_POST['Profile'];
if($model->validate() && $modelB->validate())//这里是先验证数据,如果通过再save()。
{
if ($modelB->save(false))//前面已经验证通过了,这里加个false,表示保存之前不需要再验证了!
{
$modelA->profile_id = $modelB->id;
if ($modelA->save(false))
{
$this->redirect(array('view','id'=>$modelA->id));
}
}
}
}
$this->render('create',array(
'modelA'=>$modelA,
'modelB'=>$modelB,
));
再看看视图文件的代码
<?php echo $this->renderPartial('_form', array('modelA'=>$modelA,'modelB'=>$modelB)); ?>
下面是_form的代码
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'User-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary(array($modelA,$modelB)); ?>//注意这里
<div class="row">
<?php echo $form->labelEx($modelA,'user_name'); ?>
<?php echo $form->textField($modelA,'user_name'); ?>
<?php echo $form->error($modelA,'user_name'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($modelA,'user_pass'); ?>
<?php echo $form->textField($modelA,'user_pass'); ?>
<?php echo $form->error($modelA,'user_pass'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($modelB,'status'); ?>
<?php echo $form->textField($modelB,'status'); ?>
<?php echo $form->error($modelB,'status'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($modelB,'address'); ?>
<?php echo $form->textField($modelB,'address'); ?>
<?php echo $form->error($modelB,'address'); ?>
</div>
<?php $this->endWidget(); ?>