Обновление с несколькими моделями - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть две модели, которые я хотел бы представить в одном контроллере Yii / View. Теперь я знаю, как сделать так, чтобы он мог создавать из обеих, однако я прибег к «хаку» для стороны обновления и был бы признателен некоторая помощь, чтобы сделать это правильно.

У меня есть две модели Recipes и RecipeSteps, которые определены как отношения в контроллере Recipe. RecipeSteps имеет столбец "recipe_id", который является внешним ключом и первичным ключом рецептов. Обе таблицы являются innoDB и имеют настройку отношений. RecipeSteps имеет ON DELETE CASCADE и ON UPETATE RETAIN.

Это мое actionUpdate от 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,
        ));
    }

А это моя модель нагрузки.

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 голосов
/ 13 февраля 2012

попробуйте это на php 5.3.0 ( Константы класса )

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...