最新消息: 新版网站上线了!!!

yii 一个表单提交多个模型数据

  1. --user表  

  2. Create TableCREATE TABLE `user` (  

  3.   `id` int(11) NOT NULL AUTO_INCREMENT,  

  4.   `username` varchar(45) DEFAULT NULL,  

  5.   `userpass` varchar(45) DEFAULT NULL,  

  6.   `profile_id` int(11) DEFAULT NULL,  

  7.   PRIMARY KEY (`id`),  

  8.   KEY `fk_msjy_user_1_idx` (`profile_id`),  

  9.   CONSTRAINT `profile_id` FOREIGN KEY (`profile_id`)   

  10. REFERENCES `msjy_profile` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION  

  11. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8  

  12.   

  13. --profile表  

  14. Create TableCREATE TABLE `msjy_profile` (  

  15.   `id` int(11) NOT NULL AUTO_INCREMENT,  

  16.   `status` tinyint(4) DEFAULT NULL,  

  17.   `address` varchar(45) DEFAULT NULL,  

  18.   PRIMARY KEY (`id`)  

  19. ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8  


 

接下来,gii生成user和profile模型

 

然后gii生成RegisterController并整理成如下:

  1. class RegisterController extends Controller  

  2. {  

  3.     public function actionIndex()  

  4.     {  

  5.         $this->render('index');  

  6.     }  

  7.   

  8.     public function actionCreate()  

  9.      {  

  10.          $modelA = new User;  

  11.          $modelB = new Profile;  

  12.          if(isset($_POST['User']) && isset($_POST['Profile']))  

  13.          {  

  14.              $modelA->attributes=$_POST['User'];  

  15.              $modelB->attributes=$_POST['Profile'];  

  16.                

  17.              if($modelA->validate() && $modelB->validate())  

  18.              {  

  19.                  if ($modelB->save(false))  

  20.                  {  

  21.   

  22.                           $modelA->profile_id = $modelB->id;  

  23.                            if ($modelA->save(false))  

  24.                            {  

  25.                                  $this->redirect(array('User/view','id'=>$modelA->id));  

  26.                            }  

  27.                  }  

  28.               }  

  29.          }  

  30.          $this->render('create',array(  

  31.              'modelA'=>$modelA,  

  32.              'modelB'=>$modelB,  

  33.          ));  

  34.      }  

  35.       

  36. }  


在views里的register包里创建

  1.  <?php echo $this->renderPartial('_form', array('modelA'=>$modelA,'modelB'=>$modelB)); ?>  

  2. _form.php  

  3. <div class="form">  

  4.   

  5. <?php $form=$this->beginWidget('CActiveForm', array(  

  6.     'id'=>'User-form',  

  7.     'enableAjaxValidation'=>false,  

  8. )); ?>  

  9.   

  10.     <p class="note">Fields with <span class="required">*</span> are required.</p>  

  11.   

  12.     <?php echo $form->errorSummary(array($modelA,$modelB)); ?>//注意这里  

  13.   

  14.     <div class="row">  

  15.         <?php echo $form->labelEx($modelA,'username'); ?>  

  16.         <?php echo $form->textField($modelA,'username'); ?>  

  17.         <?php echo $form->error($modelA,'username'); ?>  

  18.     </div>  

  19.   

  20.     <div class="row">  

  21.         <?php echo $form->labelEx($modelA,'userpass'); ?>  

  22.         <?php echo $form->textField($modelA,'userpass'); ?>  

  23.         <?php echo $form->error($modelA,'userpass'); ?>  

  24.     </div>  

  25.   

  26.     <div class="row">  

  27.         <?php echo $form->labelEx($modelB,'status'); ?>  

  28.         <?php echo $form->textField($modelB,'status'); ?>  

  29.         <?php echo $form->error($modelB,'status'); ?>  

  30.     </div>  

  31.   

  32.     <div class="row">  

  33.         <?php echo $form->labelEx($modelB,'address'); ?>  

  34.         <?php echo $form->textField($modelB,'address'); ?>  

  35.         <?php echo $form->error($modelB,'address'); ?>  

  36. </div><div class="row">  

  37. </div><div class="row buttons">  

  38. <?php echo CHtml::submitButton($modelA->isNewRecord ? 'Create' : 'Save'); ?>  

  39.     </div>      

  40. <?php $this->endWidget(); ?>  

  41. </div>  

另外,关于create方法里的验证,原文有说明,此处省略文字若干。。。。。

 

转载请注明:谷谷点程序 » yii 一个表单提交多个模型数据