Заполнение CGridView отношения один ко многим - PullRequest
2 голосов
/ 24 октября 2011

В моем проекте одна из моделей с именем типов , имеющая множественное отношение к другим моделям, критерий с деталью дает ниже, чем

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

отношения идут как

  • типы - категория - отношение (1-1)
  • типы - подкатегория - отношение (1-1)
  • типы - accountsSupplierPriceDetails - отношение (1-1)
  • accountSupplierPriceDetails - serviceLevel - отношение (1-n)

Моя проблема в том, как отобразить имена из каждой таблицы в сетке. результат (1-n) должен отображаться в выпадающем списке. когда я пытаюсь получить доступ к данным из столбца, он показывает ошибку Попытка получить свойство необъекта ($ data-> accountsSupplierPriceDetails-> serviceLevel -> name). Может кто-нибудь, пожалуйста, помогите мне.

Заранее спасибо.

1 Ответ

3 голосов
/ 07 ноября 2011

, на мой взгляд, я создаю cgridview с 5 строками, в которых данные одной строки заполняются с использованием раскрывающегося списка.

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

, пожалуйста, прокомментируйте, если выесть какие-то сомненияя свободен поделиться ... хорошего дня ТАК друзья ... пожелания и молитвы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...