填充CGridView一对多关系

时间:2011-10-24 10:05:40

标签: yii

在我的项目中,名为类型的模型之一与其他模型有多种关系,其中部分标准在下面给出了类似

$criteria->with = array(
            'category',
            'subCategory',
            'accountsSupplierPriceDetails' => array(
                'with' => 'serviceLevel'
            )
        );

关系就像

  • 类型 - 类别 - 关系(1-1)
  • 类型 - 子类别 - 关系(1-1)
  • types - accountsSupplierPriceDetails - relation(1-1)
  • accountsSupplierPriceDetails - serviceLevel - relation(1-n)

我的问题是如何显示网格中每个表的名称。 (1-n)的结果应显示在下拉框中。当我尝试从列访问数据时,它会显示错误 尝试获取非对象的属性 ($ data-> accountsSupplierPriceDetails-> serviceLevel - > name )。任何人都可以帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:3)

在我的视图中,我创建了一个包含5行的cgridview,其中使用下拉列表填充了一行数据。

    <div style="width:700px; height:auto;">
        <?php
        $widget = $this->widget('zii.widgets.grid.CGridView', array(
            'id' => 'response-grid',
            'dataProvider' => $pickdataset->pickCategorylistingForMain(),
            'cssFile' => Yii::app()->baseUrl . '/media/css/gridview.css',
            'summaryText' => '',
            'ajaxUpdate' => 'response-grid',
            'enablePagination' => true,
            'pager' => array(
                'class' => 'LinkPager',
                'cssFile' => false,
                'header' => false,
                'firstPageLabel' => 'First',
                'prevPageLabel' => 'Previous',
                'nextPageLabel' => 'Next',
                'lastPageLabel' => 'Last',
            ),
            'columns' => array(
                array(
                    'name' => 'id',
                    'header' => '#',
                    'value' => '$this->grid->dataProvider->pagination->currentPage * $this->grid->dataProvider->pagination->pageSize + ($row+1)',
                ),
                array(
                    'type' => 'raw',
                    'name' => 'categoryExt',
                    'header' => 'Category',
                ),
                array(
                    'type' => 'raw',
                    'header' => 'Sub Category',
                    'value' => '$data->subCategory->name',
                ),
                array(
                    'type' => 'raw',
                    'name' => 'locationExt',
                    'header' => 'Location',
                ),
                array(
                    'type' => 'raw',
                    'header' => 'Name',
                    'value' => 'CHtml::dropDownList($data->corporate_id."-".$data->category_id."-".$data->sub_category_id."-".$data->location_id,"",popDropBox($data->masterCategoryServiceLevels), array("class" => "listbox"), array("empty" => "Select a Location"))',
                ),
                array(
                    'type' => 'raw',
                    'header' => 'Pick',
                    'value' => 'CHtml::image(Yii::app()->baseUrl . "/media/images/edit_icon.png",$data->corporate_id."-".$data->category_id."-".$data->sub_category_id."-".$data->location_id,array("title" => "Select this Combination"))',
                ),
            ),));

        function popDropBox($data)
        {
            $list = array();
            foreach ($data as $row)
            {
                $list[$row->serviceLevel->id] = $row->serviceLevel->name;
            }
            return $list;
        }
        ?>
</div>

模型中的关系是:

'masterCategoryServiceLevels' => array(self::HAS_MANY, 'MasterCategoryServiceLevel', 'category_template_id'),
'corporate' => array(self::BELONGS_TO, 'AccountsCorporate', 'corporate_id'),
'category' => array(self::BELONGS_TO, 'MasterCategory', 'category_id'),
'subCategory' => array(self::BELONGS_TO, 'MasterCategory', 'sub_category_id'),
'location' => array(self::BELONGS_TO, 'MasterLocation', 'location_id'),

该行

array(
'type' => 'raw',

'header' => 'Name',

'value' => 'CHtml::dropDownList($data->corporate_id."-".$data->category_id."-".$data->sub_category_id."-".$data->location_id,"",popDropBox($data->masterCategoryServiceLevels), array("class" => "listbox"), array("empty" => "Select a Location"))',
                    ),

我使用函数来创建下拉数据

function popDropBox($data)
            {
                $list = array();
                foreach ($data as $row)
                {
                    $list[$row->serviceLevel->id] = $row->serviceLevel->name;
                }
                return $list;
            }

如果您有任何疑问,请发表评论。我可以自由分享......祝大家有个美好的一天......祝福和祈祷。