[英]Yii: How to get records from a CDataProvider , and how to echo record fields?
我的模型中有一個自定義數據提供程序
我在控制器中嘗試過
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行表。 靜態的。
使用第一個答案的建議,我得到了:
我以這種方式獲得了結果:
<?php
foreach ($dataProvider->getData() as $id => $singleRecord) {
$this->renderPartial('_monthTotal', array('data' => $singleRecord));
}
?>
並刪除clistview小部件。
但是您的回答對我很有幫助,所以我會優先考慮您,謝謝!
嘗試:
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()循環遍歷數據集
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.