2012-02-12 60 views
0

我有兩個模型,我想在一個單一的Yii控制器/視圖中呈現現在我知道如何使它可以從兩個創建,但我訴諸了更新方的「黑客」我將不勝感激一些幫助。更新與多個型號

我有兩個模型食譜和RecipeSteps定義爲食譜控制器中的關係。 RecipeSteps有一個列「recipe_id」,它是一個外鍵和Recipes的主鍵。這兩個表都是innoDB,並且有關係設置。 RecipeSteps具有ON DELETE CASCADE和ON UPDATE RETAIN集。

這是RecipesController.php

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, 
     )); 
    } 

我actionUpdate這是我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; 
    } 

所以我想要做的是弄清楚如何在actionUpdate中只有一個適用於這兩個模型的「LoadModel」。

回答

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; 
}