Yii:如何从CDataProvider获取记录,以及如何回显记录字段?

时间:2012-10-14 18:20:35

标签: php yii

我的模型

中有自定义数据提供程序

我在控制器中尝试了这个

public function actionMonthTotal()
{
    $model=new Rapporti();
    $this->render('monthTotal',array(
            'dataProvider'=>$model->monthTotal(),
    ));
}

其中monthTotal是给我一个DataProvider的模型函数

实际上'monthTotal'是view.php的副本/过去,它使用_monthTotal的clistView,这是_view.php的副本/过去

我需要简单地从dataProvider获取数据集('SELECT COUNT,SUM,SUM等...)并迭代到记录集以将一个简单的TABLE回显到monthTotal视图中。所以......

如何使用视图中的dataProvider获取记录以及如何通过recors迭代?

我的月总数是这个并且在'报告'模型

实际报告的关系是报告N - > 1 Pionierato(对不起意大利语,但只是对象名称)

public function totalMonth() {
    $criteria = new CDbCriteria();
    $criteria->with = array ('pionierato');
    $criteria->condition = 'dataBetel=:month';
    $criteria->select = "COUNT(t.id) as numProclamatori,
                            pionierato.tipo as tipoPionierato,
                            SUM(libri) as sommaLibri,
                            SUM(opuscoli) as sommaOpuscoli,
                            SUM(ore) as sommaOre,
                            SUM(riviste) as sommaRiviste,
                            SUM(visite) as sommaVisite,
                            SUM(studi) as sommaStudi";

    $criteria->group  = "t.dataBetel, t.pionieratoId";
    $criteria->params = array ('month' => "2012-09-01");

    $dataProvider=new CActiveDataProvider('Rapporti', 
                                           array ('criteria' => $criteria)
                                         );

    return $dataProvider;
}

我需要使用此数据提供器来获取它将输出的3条记录并打印3行表。静态的。

使用第一个答案的建议,我得到了这个:

Actual results

2 个答案:

答案 0 :(得分:4)

我以这种方式获得了结果:

<?php 

foreach ($dataProvider->getData() as $id => $singleRecord) {
        $this->renderPartial('_monthTotal', array('data' => $singleRecord));
}

?>  

并删除clistview小部件。

但是你的回答对我很有帮助,所以我会优先考虑你,谢谢!

答案 1 :(得分:3)

尝试:

public function actionMonthTotal()
{
    $model = Rapporti::model()->monthTotal();
    $this->render('monthTotal',array(
            'dataProvider'=>$model,
    ));
}

这应该有效,你创建一个名为$ model的对象,其值等于Rapporti模型中方法monthTotal()的返回值

如果这不起作用,请检查您是否实际从monthTotal函数获取结果,方法是将其复制(减去返回部分)到控制器中,而不是从模型中调用它。

在您的monthTotal视图中,您可以使用CListView来迭代活动记录,如下所示:

<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
)); ?>

每次迭代都会调用名为“_view”的子视图。可以使用$ data(例如:$ data-&gt; id);

访问该记录的数据

以下是不使用CActiveDataprovider查询的示例:

$model = Rapporti::model()->findAll(array(
    'condition' => 'dataBetel=:month',
    ...
));

您可以尝试...或者您可以使用findAllBySql()而不是findAll()并以这种方式输入您的查询。然后,您将能够使用foreach()循环遍历数据集