簡體   English   中英

在yii中用單個視圖更新不同數據庫的兩個模型

[英]Update two models of different databases with single view in yii

我有一個具有字段(名稱,摘要)提交按鈕的視圖(_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/

這段代碼實際上應該可以工作,但是不好。

我假設您根本不了解什么是模型及其在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)

2號 在您看來,您可以使用變量。

<?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),也可以形成一個數組並將其從數組中推入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM