首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Yii -如何在同一表单中保存两个模型?

Yii -如何在同一表单中保存两个模型?
EN

Stack Overflow用户
提问于 2014-08-06 23:15:16
回答 1查看 197关注 0票数 0

我正在做一个项目。我想在一个相同的形式保存2个模型。我尝试过这样:在QController.php中使用actionCreate

代码语言:javascript
运行
复制
public function actionCreate()
{
    $model=new Question;
    $test=new Answer;

    if(isset($_POST['Question']) && ($_POST['Answer']))
    {
        $model->attributes=$_POST['Question'];
        $model->question=CUploadedFile::getInstance($model,'question');
        $test->attributes=$_POST['Answer'];
        $valid=$model->validate();
        $valid=$test->validate() && $valid;
        if($valid){
            $model->save(false);
            $test->save(false);
            $model->question->saveAs(Yii::app()->basePath . '/../images/questions/' . $model->question.'');
            $this->redirect(array('view','id'=>$model->id_question));
        }
     }

   $this->render('create',array(
         'model'=>$model,
         'test'=>$test,
   ));
}

然后,在我的Q/_form.php中

代码语言:javascript
运行
复制
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(
'id'=>'question-form',
'enableAjaxValidation'=>false,
)); ?>

<?php $answerModel = new Answer; ?>


<p class="help-block">Fields with <span class="required">*</span> are required.</p>

<?php echo $form->errorSummary($model, $answerModel); ?>

<?php echo $form->fileFieldRow($model,'question',array('class'=>'span5','maxlength'=>50)); ?>

<?php echo $form->textFieldRow($answerModel,'optionA',array('class'=>'span5','maxlength'=>100)); ?>

//rest of codes

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

我已经尝试过了,但仍然没有保存数据。我怎么做才能修复它呢?谢谢你的回答

EN

回答 1

Stack Overflow用户

发布于 2014-08-06 23:34:25

您应该先验证数据,然后再保存数据:

代码语言:javascript
运行
复制
$model->attributes=$_POST['Question'];
$test->attributes=$_POST['Answer'];

$valid = $model->validate();
$valid = $location->validate() && $valid;

if ($valid) {
    // use false parameter to disable validation
    $model->save(false);
    $test->save(false);

    // redirect
}

对于事务:

代码语言:javascript
运行
复制
$model->attributes=$_POST['Question'];
$test->attributes=$_POST['Answer'];

$valid = $model->validate();
$valid = $location->validate() && $valid;

if ($valid) {
    $dbTransaction = Yii::app()->db->beginTransaction();
    try {
        // use false parameter to disable validation
        $model->save(false);
        $test->save(false);
        $dbTransaction->commit();

        // redirect here
    } catch (Exception $e) {
        $dbTransaction->rollBack();

        // save/process error
    } 
 }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25164084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档