使用多个模型更新

时间:2012-02-12 23:00:29

标签: yii models

我有两个模型,我想在一个Yii控制器/视图中呈现现在我知道如何制作它以便它可以从两个创建然而我使用“黑客”更新方面,我会很感激一些帮助使它正确。

我有两个模型Recipes和RecipeSteps,在配方控制器中定义为关系。 RecipeSteps有一个“recipe_id”列,它是一个外键和Recipes的主键。这两个表都是innoDB并且具有关系设置。 RecipeSteps具有ON DELETE CASCADE和ON UPDATE RETAIN设置。

这是来自RecipesController.php

的actionUpdate
public function actionUpdate($id)
    {
        $model=$this->loadModel($id);
        $recipeSteps=$this->loadModelSteps($id);

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['Recipes']) && isset($_POST['RecipeSteps']))
        {
            $model->attributes=$_POST['Recipes'];
            $recipeSteps->attributes=$_POST['RecipeSteps'];
            if($model->save())
            $recipeSteps->recipe_id = $model->recipe_id;
            $recipeSteps->save();
                $this->redirect(array('view','id'=>$model->recipe_id));
        }

        $this->render('update',array(
            'model'=>$model,
            'recipeSteps'=>$recipeSteps,
        ));
    }

这是我的loadModel。

public function loadModel($id)
    {
        $model=Recipes::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }

这是我为另一个模型制作的第二个,我想凝聚成一个模型。

public function loadModelSteps($id)
    {
    $recipeSteps=RecipeSteps::model()->findByPk($id);
        if($recipeSteps===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $recipeSteps;
    }

所以我想要做的是弄清楚如何只有一个“LoadModel”适用于actionUpdate中的两个模型。

1 个答案:

答案 0 :(得分:0)

在php 5.3.0(Class Constants

上试试这个
public function loadModel($id,$modelName){
    $o=call_user_func(array($modelName,'model'));
    $model = $o->findByPk($id);
    if($modelByPk===null)
        throw new CHttpException(404,'The requested page does not exist.');
    return $modelByPk;
}