Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php YII模型可处理多个表_Php_Database_Activerecord_Yii - Fatal编程技术网

Php YII模型可处理多个表

Php YII模型可处理多个表,php,database,activerecord,yii,Php,Database,Activerecord,Yii,我正在用YII开发一份登记表。在我的表格中,有一个单选选项可选择注册为Mode1或注册为Mode2。如果用户选择模式1,则应将数据输入表1或表2。 在YII中,每个模型处理一个表。这里我的表格处理两个表格 那么如何处理这样一个表单来验证数据并将其输入YII中的表?最简单的方法是为表单创建一个模型(假设它们具有相同的字段?) 该类将扩展CFormModel(在下面的示例中,我将该模型称为GlobalFormModel) 此模型将具有与其他两个模型相同的属性,以及一个名为mode的新属性 提交表单时

我正在用YII开发一份登记表。在我的表格中,有一个单选选项可选择注册为Mode1或注册为Mode2。如果用户选择模式1,则应将数据输入表1或表2。 在YII中,每个模型处理一个表。这里我的表格处理两个表格


那么如何处理这样一个表单来验证数据并将其输入YII中的表?

最简单的方法是为表单创建一个模型(假设它们具有相同的字段?) 该类将扩展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的一个新实例(传递给视图)。您可以检查表单是否已提交(您可以在此处验证表单,也可以在加载两个模型之一后验证表单,这是您的选择)。检查模式,然后加载正确的模型。

最简单的方法是为表单创建一个模型(假设它们具有相同的字段?) 该类将扩展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的一个新实例(传递给视图)。您可以检查表单是否已提交(您可以在此处验证表单,也可以在加载两个模型之一后验证表单,这是您的选择)。检查模式,然后加载正确的模型。

因此,我不想在GlobalFormModel中指定规则(在其他两个模型中指定的规则就足够了),不是吗?您可以为其中一个模型添加一个附加属性,例如FormOne(他是您将传递到视图的模型)。提交表单后,您可以检查属性值是什么,并将模型更改为Form2或保留FormOne。这是同样的事情,只是不太“传统”,所以,我不想在GlobalFormModel中指定规则(在另外两个模型中指定的规则就足够了),不是吗?您可以为其中一个模型添加一个附加属性,例如FormOne(他是您将传递到视图的模型)。提交表单后,您可以检查属性值是什么,并将模型更改为Form2或保留FormOne。这是一样的,只是不那么“传统”