2013-08-07 1 views
0

Yii 응용 프로그램에 2 개의 테이블이 있습니다. 범주항목. 내가하고 싶은 무엇DataProvider 데이터 항목으로 배열 병합

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

CListView와 함께 사용할 수 있도록 $ count 배열을 기존 dataProvider 데이터 항목과 어떻게 병합합니까? 이보다 훨씬 좋은 해결책이 있습니까?

+0

당신은 안 관계를 올바르게 설정해야합니다. 색인보기에 무엇이 있는지 보여줄 수 있습니까? – Pitchinnate

+0

실제로 gii로 만들어진 기본 파일을 사용하고 있다면'_view.php' 파일을 공유 할 수 있습니다. – Pitchinnate

답변

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

안녕하세요. 솔루션을 가져 주셔서 감사합니다. 내 관계가 이미 정의되었고 방금 count ($ data-> items) 행을 내보기에 적용했습니다. 완벽하게 작동합니다. – NAT3863