YII模型可以处理多个表

时间:2012-10-30 09:38:21

标签: php database activerecord yii

我正在YII开发一份注册表。在我的表单中有一个单选按钮可选择注册为Mode1或注册为Mode2。如果用户选择mode1,则应将数据输入table1,或者输入到table2。 在YII中,每个模型处理一个表。在这里,我的表格涉及两个表格。

那么如何处理这样的表格以验证并在YII中输入数据到表格?

1 个答案:

答案 0 :(得分:3)

最简单的方法是为表单创建一个模型(假设它们具有相同的字段?) 这个类将扩展 CFormModel (在下面的示例中,我将此模型称为 GlobalFormModel

此模型与其他两个模型具有相同的属性,以及一个名为 mode 的新属性 提交表单后,您可以在控制器中根据哪种模式处理它,并根据正确的模型对其进行验证,例如:

$model = new GlobalFormModel

if(isset($_POST['GlobalFormModel'])){
    $model->attributes = $_POST['GlobalFormModel']; 

    if ($model->mode == 1){
        $newmodel = new FormOne;
        $newmodel->attributes = $model->attributes;
    } else {
         $newmodel = new FormTwo;
         $newmodel->attributes = $model->attributes;
    } 

    ... // validate and save $newmodel
}

$this->render("yourview",array("model"=>$model));

其中FormOne是与第一个表关联的模型,FormTwo与第二个表关联。首先,创建GlobalFormModel的新实例(传递给视图)。您检查表单是否已提交(您可以在此处验证或在加载两个模型之一后,您可以选择)。您检查模式,然后加载正确的模型。