在yii中使用单个视图更新两个不同数据库的模型

时间:2013-08-05 11:24:08

标签: php yii database-abstraction yii-cmodel

我有一个视图(_form.php),其中包含字段(名称,摘要)提交按钮。如果我点击提交按钮,它应该更新一个模型的名称字段和另一个模型的摘要字段。这些模型是不同的数据库。 任何人都可以帮助这个。我为此尝试了以下内容 在 _form.php(测试)

<?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/

1 个答案:

答案 0 :(得分: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 =&gt; $ 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乘1),或者形成一个数组并从阵列中推送它。