需要一些帮助理解模型和数据提供者

时间:2012-02-10 16:19:31

标签: model dataprovider yii

我是Yii的新手,我正在尝试通过创建一个业余爱好网站来管理我的食品购物。我正在尝试创建一个列出我的食谱的页面,每个食谱旁边都有一个+/-按钮,当按下时会更新同一页面上的购物清单。所有配方成分和购物清单都存储在SQL数据库中。

到目前为止,我有一个名为ShoppingListController的控制器和我的actionIndex()函数(显示食谱和购物清单)我正在创建两个数据提供者和一个模型(用于表单的+/-按钮)和传递他们对我的观点如下:

        // Create a shopping list item model
        $shoppingListModel = new TblShoppingListItem;

        // Get the saved shopping list data from the shopping list table
        $shoppingDataProvider = new CActiveDataProvider('TblShoppingListItem', array(
            'criteria'=>array(
                'select'=>array('recipe_id', 'recipe_multiplier')), 
            'pagination'=>array('pageSize'=>500)
        ));

        // Get the recipe ingredient data from the recipe models and order by recipe name           
        $recipeDataProvider = new CActiveDataProvider('TblRecipeIngredient', array(
            'criteria'=>array(
                'select'=>array('recipe_id', 'ingredient_id', 'ingredient_unit_id', 'ingredient_amount'),   
                'with'=>array('recipe','ingredient','ingredientUnit'),
                'together'=>true,
                'order'=>'recipe.name ASC'),
            'pagination'=>array('pageSize'=>500)
        ));

        // Render the 'shoppinglist/show' page
        $this->render('show', array(
            'recipeDataProvider'=>$recipeDataProvider, 
            'shoppingDataProvider'=>$shoppingDataProvider,
            'shoppingListModel'=>$shoppingListModel
        ));

我有点困惑 - 我似乎需要将模型传递到+/-表单,我需要第一个数据提供程序,以便我可以显示我的购物清单,我需要第二个数据提供程序,以便我可以显示我的食谱信息。

但是,我想知道我是否真的需要shoppingListModel和shoppingDataProvider(即两种做法都不好)?我可以从模型中获得我需要的信息吗?我对模型和数据提供者之间的区别感到困惑。

1 个答案:

答案 0 :(得分:0)

这是您使用或不使用数据提供者的选择。我正在使用数据提供器,当我需要分页或gridview时,每次我只使用模型中的数据。

Dataproviders为数据提供了额外的控制选项,但如果您只需要数据,我认为您必须使用模型。