2

我的模型中有一个自定义数据提供程序

我在控制器中尝试了这个

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

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

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

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

如何使用视图中的 dataProvider 来获取记录以及如何迭代槽记录?

我的月总数是这个,并且在“报告”模型中

实际上报告在关系报告 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;
}

我需要使用这个 dataprovider 来获取它将输出的 3 条记录并打印一个 3 行表。静止的。

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

实际结果

4

2 回答 2

4

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

<?php 

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

?>  

并删除 clistview 小部件。

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

于 2012-10-14T20:32:09.403 回答
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->id);

下面是一个不使用 CActiveDataprovider 的查询示例:

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

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

于 2012-10-14T19:30:39.563 回答