0

我有一个带有字段(名称,摘要)提交按钮的视图(_form.php)。如果我点击提交按钮,它应该更新一个模型的名称字段和另一个模型的摘要字段。这两个模型都属于不同的数据库。任何人都可以帮助解决这个问题。我为此尝试了以下
In _form.php(Test)

<?php echo $form->labelEx($model, ‘name’); ?>
<?php echo $form->textField($model, ‘name’, array(‘size’ => 60, ‘maxlength’ => 250)); ?>
<?php echo $form->error($model, ‘name’); ?>
<?php echo $form->labelEx(Test1::model(), ‘summary’); ?>
<?php echo $form->textField(Test1::model(), ‘summary’, array(‘size’ => 60, ‘maxlength’ => 250)); ?>
<?php echo $form->error(Test1::model(), ‘summary’); ?>
<?php echo CHtml::submitButton($model->isNewRecord ? ‘Create’ : ‘Save’); ?>

TestController.php

public function actionCreate() {
        $model = new Test;
        if (isset($_POST['Test'])) {
            $model->attributes = $_POST['Test'];
            if ($model->save()) {
                $modeltest1 = new Test1;
                $modeltest1->attributes = $_POST['Test1'];
                $modeltest1->Id = $model->Id;
                if ($modeltest1->save())
                    $this->redirect(array('view', 'Id' => $model->Id));
            }
        }
        $this->render('create', array(
            'model' => $model,
        ));
    }  

此代码不起作用。我怎样才能使它适用于不同的数据库。我为此点击了以下链接。

http://www.yiiframework.com/wiki/291/update-two-models-with-one-view/
4

1 回答 1

0

这段代码实际上应该可以工作,但它很糟糕。

我假设你根本不了解什么是模型以及它在 Yii 中的作用,以及如何渲染和创建表单。

我将尝试解释它应该如何。

首先不要Test::model()在视图中使用,除非你想从中调用一些函数(但尽量避免它)。可以通过从控制器传递它来完成:

    public function actionCreate() {
            $model_name = new Name;
            $model_summary=new Summary;
//something here
            $this->render('create', array(
                'name' => $model_name,
                'summary'=>$model_summary,
            ));
        }  

当您进行渲染时,您将变量传递给您的视图(name_in_view=>$variable)

第二。在您看来,您可以使用您的变量。

<?php echo $form->labelEx($name, ‘name’);
echo $form->textField($name, ‘name’, array(‘size’ => 60, ‘maxlength’ => 250));
echo $form->error($name, ‘name’);
echo $form->labelEx($summary, ‘summary’);
echo $form->textField($summary, ‘summary’, array(‘size’ => 60, ‘maxlength’ => 250)); ?>
echo $form->error($summary, ‘summary’); ?>
echo CHtml::submitButton($model->isNewRecord ? ‘Create’ : ‘Save’); ?>

第三。您需要了解什么是模型。在这种情况下,它是扩展 CActiveRecord 的类。您在控制器中的代码应如下所示:

public function actionCreate() {
                $model_name = new Name;
                $model_summary=new Summary;
                if (isset($_POST['Name']))
                   $model_name->attributes=$_POST['Name'];
                if (isset($_POST['Summary']))
                   $model_name->attributes=$_POST['Summary'];
                if ($model_name->save()&&$model_summary->save())
                   $this->redirect(array('view', 'Id' => $model->Id));  
                $this->render('create', array(
                    'name' => $model_name,
                    'summary'=>$model_summary,
                ));
            }

$model->attributes=$_POST[]这是属性的批量分配,因此它们在规则中必须是安全的。您始终可以用手(1 x 1)分配属性,或者形成一个数组并从数组中推送它。

于 2013-08-05T12:00:47.667 回答