2

モデルにカスタムデータプロバイダーがあります

これをコントローラーで試してみました

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を使用してレコードを取得する方法と、トラフの再実行を繰り返す方法は?

私の月の合計はこれで、「レポート」モデルにあります

実際、レポートはレポート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レコードを取得する必要があります。静的。

最初の答えからの提案を使用して、私はこれを得ました:

実績

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

それは機能するはずです。Rapporti モデルの monthTotal() メソッドの戻り値と等しい値を持つ $model という名前のオブジェクトを作成しています。

それが機能しない場合は、モデルから呼び出すのではなく、実際に 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',
    ...
));

あなたはそれを試すことができます... あるいは、findAll() の代わりに findAllBySql() を使用して、そのようにクエリを入力することもできます。その後、 foreach() ループを使用してデータセットを反復処理できます

于 2012-10-14T19:30:39.563 に答える