Php Yii-如何以相同的形式保存两个模型?

Php Yii-如何以相同的形式保存两个模型?,php,yii,Php,Yii,我正在做一个项目。我想以相同的形式保存两个模型。我试过这样做: QController.php中的actionCreate public function actionCreate() { $model=new Question; $test=new Answer; if(isset($_POST['Question']) && ($_POST['Answer'])) { $model->attributes=$_POST[

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

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中

<?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(); ?>

带*的字段是必需的

//其余代码

我已经试过了,但仍然没有保存数据。我怎样才能把它修好?感谢您的回答

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

$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
}
和交易:

$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
    } 
 }

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

$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
}
和交易:

$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
    } 
 }

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

$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
}
和交易:

$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
    } 
 }

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

$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
}
和交易:

$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
    } 
 }


虽然这可能不是您在答案中所要寻找的,但将两个模型组合成一个模型可能是最简单的。我如何才能做到这一点?也许你可以帮我(对不起,我很早就按了“回车”键,所以原始评论还没有完成),所以你有两种模式:问答。也许您可以创建一个名为“QA”的类,其中包含这两个模型。然后,您的控制器将接受类型为“QA”的帖子。是的,我将更新我的代码如果$test->save()返回false,那么可能会有一些验证错误,您应该检查此模型上的错误。虽然这可能不是您在答案中要查找的错误,但将两个模型合并为一个模型可能是最简单的。我如何才能做到这一点?也许你可以帮我(对不起,我很早就按了“回车”键,所以原始评论还没有完成),所以你有两种模式:问答。也许您可以创建一个名为“QA”的类,其中包含这两个模型。然后,您的控制器将接受类型为“QA”的帖子。是的,我将更新我的代码如果$test->save()返回false,那么可能会有一些验证错误,您应该检查此模型上的错误。虽然这可能不是您在答案中要查找的错误,但将两个模型合并为一个模型可能是最简单的。我如何才能做到这一点?也许你可以帮我(对不起,我很早就按了“回车”键,所以原始评论还没有完成),所以你有两种模式:问答。也许您可以创建一个名为“QA”的类,其中包含这两个模型。然后,您的控制器将接受类型为“QA”的帖子。是的,我将更新我的代码如果$test->save()返回false,那么可能会有一些验证错误,您应该检查此模型上的错误。虽然这可能不是您在答案中要查找的错误,但将两个模型合并为一个模型可能是最简单的。我如何才能做到这一点?也许你可以帮我(对不起,我很早就按了“回车”键,所以原始评论还没有完成),所以你有两种模式:问答。也许您可以创建一个名为“QA”的类,其中包含这两个模型。然后,您的控制器将接受类型为“QA”的帖子。是的,我将更新我的代码如果$test->save()返回false,则可能存在一些验证错误,您应该检查此模型上的错误。这似乎是最好的方法。然后,您可以使用db transaction来确保两者都已保存或均未保存。@darkheir当然,我已添加了示例。@ValeryViktorovsky,我已尝试了您的代码,但仍然无法保存data@gultomicro删除if($model->save()&&$test->save())代码并添加下面的重定向“$test->save(false)”代码。我认为您的测试模型验证返回错误。将“测试”模型错误添加到错误输出并修复这些错误。我已尝试修复它。但是,现在问题字段中出现错误-->“问题不能为空”。我已经在上面更新了我的代码,这似乎是最好的方法。然后,您可以使用db transaction来确保两者都已保存或均未保存。@darkheir当然,我已添加了示例。@ValeryViktorovsky,我已尝试了您的代码,但仍然无法保存data@gultomicro删除if($model->save()&&$test->save())代码并添加下面的重定向“$test->save(false)”代码。我认为您的测试模型验证返回错误。将“测试”模型错误添加到错误输出并修复这些错误。我已尝试修复它。但是,现在问题字段中出现错误-->“问题不能为空”。我已经在上面更新了我的代码,这似乎是最好的方法。然后,您可以使用db transaction来确保两者都已保存或均未保存。@darkheir当然,我已添加了示例。@ValeryViktorovsky,我已尝试了您的代码,但仍然无法保存data@gultomicro删除if($model->save()&&$test->save())代码并添加下面的重定向“$test->save(false)”代码。我认为您的测试模型验证返回错误。将“测试”模型错误添加到错误输出并修复这些错误。我已尝试修复它。但是,现在问题字段中出现错误-->“问题不能为空”。我已经在上面更新了我的代码,这似乎是最好的方法。然后,您可以使用db transaction来确保两者都已保存或均未保存。@darkheir当然,我已添加了示例。@ValeryViktorovsky,我已尝试了您的代码,但仍然无法保存data@gultomicro删除if($model->save()&&$test->save())代码并添加下面的重定向“$test->save(false)”代码。我认为您的测试模型验证返回错误。将“测试”模型错误添加到错误输出并修复这些错误。我已尝试修复它。但是,现在问题字段中出现错误-->“问题不能为空”。我已经更新了上面的代码