2

小さな問題があります。会社や部署との関係であるユーザー CGridView を作成しました。

エラー : 会社名がグリッド ビューに表示されます。しかし、部門名はグリッドビューに表示されません。

'value'=>..... のコメントを外すと、「オブジェクト以外のプロパティを取得しようとしています」と表示されます。

このモデル関係

public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
                     'ranks' => array(self::BELONGS_TO, 'Rank', 'rank_id'),
                     'companies' => array(self::BELONGS_TO, 'Company', 'company_id'),
                     'departments' => array(self::BELONGS_TO, 'Department', 'department_id'),
                     'departmentsdep' => array(self::BELONGS_TO, 'Department', 'department_id'),
                     'departmentssec' => array(self::BELONGS_TO, 'Department', 'section_id'),
                     'departmentstea' => array(self::BELONGS_TO, 'Department', 'team_id'),
        );
    }

これはグリッドビューです

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'user-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'login_name',
        'first_name',
        'last_name',
        'email',
        array(
            'name' => 'company_id',
            'value'=>'$data->companies->name',
            'filter'=>CHtml::listData($companylist, 'id', 'name'),
        ),
        array(
            'name' => 'department_id',
            //'value'=>'$data->departmentsdep->name',
            'filter' => 
            CHtml::listData(
                is_numeric($model->company_id) ? Department::model()->findAll(new CDbCriteria(array(
                'condition' => 'p_id = 0 AND company_id=:company_id',
                'params' => array(':company_id' => $model->company_id),
            ))) : $department, 'id', 'name'),
        ),
        array(
            'name' => 'section_id',
            //'value'=>'$data->departmentssec->name',
            'filter' => 
            CHtml::listData(
                is_numeric($model->department_id) ? Department::model()->findAll(new CDbCriteria(array(
                'condition' => 'p_id = :pid AND company_id=:company_id',
                'params' => array(':company_id' => $model->company_id, ':pid'=>$model->department_id),
            ))) : $department, 'id', 'name'),
        ),
        array(
            'name' => 'team_id',
            //'value'=>'$data->departmentstea->name',
            'filter' => 
            CHtml::listData(
                is_numeric($model->department_id) ? Department::model()->findAll(new CDbCriteria(array(
                'condition' => 'p_id = :pid AND company_id=:company_id',
                'params' => array(':company_id' => $model->company_id, ':pid'=>$model->section_id),
            ))) : $department, 'id', 'name'),
        ),
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

このエラーを解決するにはどうすればよいですか

4

2 に答える 2

0

これが私の解決策です

'value' => '($data->department_id == 0) ? "" : $data->departmentsdep->name',

完全なコード

array(
            'name' => 'department_id',
            'value' => '($data->department_id == 0) ? "" : $data->departmentsdep->name',
            'filter' => 
            CHtml::listData(
                is_numeric($model->company_id) ? Department::model()->findAll(new CDbCriteria(array(
                'condition' => 'p_id = 0 AND company_id=:company_id',
                'params' => array(':company_id' => $model->company_id),
            ))) : $department, 'id', 'name'),

        ),
于 2012-07-30T09:50:14.130 に答える
0

「.」を使用してリレーションにアクセスできます。関係に署名します。この方法ははるかに簡単です:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'user-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
    'login_name',
    'first_name',
    'last_name',
    'email',
    array(
        'name' => 'companies.name',
        'filter'=>CHtml::listData($companylist, 'id', 'name'),
    ),
    ...
于 2012-07-31T07:33:30.367 に答える