我的Yii应用程序中有2个表; 类别和项目。
Category
- id
- name
Item
- id
- category_id
- name
我想要的是获取类别表中的项目列表,然后计算项目表中每个类别的项目数。
我正在使用CActiveDataProvider检索Category表中的项目列表,然后使用for循环计算每个类别中的项目数。但是,我似乎无法弄清楚如何将数组与我的DataProvider数据项合并。
到目前为止,这是我的代码。
public function actionIndex()
{
$dataProvider = new CActiveDataProvider('Category', array(
'criteria' => array(
'select' => 'id, name, slug',
'order' => 'name ASC',
),
));
$dataProvider->setPagination(false);
$count = array();
foreach($dataProvider->getData() as $categoryData) {
$count[] = Item::model()->count("category_id = :categoryID", array("categoryID" => $categoryData->id));
}
$this->render('index', array(
'dataProvider' => $dataProvider,
'count' => $count,
));
}
如何将$ count数组与现有的dataProvider数据项合并,以便我可以将它与CListView一起使用?有没有比这更好的解决方案?
答案 0 :(得分:0)
如果您的关系设置正确,则不需要单独的计数数组。您的index
视图最有可能如下所示:
<h1>Messages</h1>
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
)); ?>
然后你的_view
应该是这样的:
<div class="view">
<b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
<?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>
<br />
<b><?php echo CHtml::encode($data->getAttributeLabel('name')); ?>:</b>
<?php echo CHtml::encode($data->name); ?>
<br />
<b>Items:</b>
<?php echo count($data->items); ?>
<br />
</div>
这假设您的Category
模型具有此功能:
public function relations() {
return array(
'items' => array(self::HAS_MANY, 'Item', 'category_id'),
);
}