简体   繁体   English

Yii-在CGridView中更改其他模型字段的列

[英]Yii - Change column in CGridView for another model's field

In my model (let's say Model A ) I have a field corresponding to the id of another model ( Model B ). 在我的模型中(假设模型A ),我有一个与另一个模型( 模型B )的id对应的字段。 In a CGridView composed of Model A items, instead of showing the id of Model B, I want to show another field of that model instance. 在由模型A项组成的CGridView ,我不想显示模型B的ID,而是要显示该模型实例的另一个字段。

Here's how I am showing my CGridView ; 这是我显示CGridView

$dataProvider =  new CArrayDataProvider('Model A');
$dataProvider->setData($model_A_Data); // $model_A_data is an array of Model A Objects

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'data-id',
    'dataProvider'=>$dataProvider, //$objects->search(),
    'columns'=>array(
        array('header'=>'Model A Id', 'name'=>'id'),
        array('header'=>'Name', 'name'=>'name'),
        array('header'=>'Date', 'name'=>'date_created'),
        array('header'=>'Model B Id', 'name'=>'model_b_id'), // *HERE SHOW ANOTHER FIELD OF MODEL B*
    ),  
)); 

How can I change that column in order to show another field of model B clasS? 如何更改该列以显示模型B clasS的另一个字段?

Thanks 谢谢

say in Model A i have a relation 说在Model A我有关系

array('modelbrelationname','ModelB','id'),

So You can have the value like this 所以你可以拥有这样的价值

$dataProvider =  new CArrayDataProvider('Model A');
$dataProvider->setData($model_A_Data); // $model_A_data is an array of Model A Objects

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'data-id',
    'dataProvider'=>$dataProvider, //$objects->search(),
    'columns'=>array(
        array('header'=>'Model A Id', 'name'=>'id'),
        array('header'=>'Name', 'name'=>'name'),
        array('header'=>'Date', 'name'=>'date_created'),
        array('header'=>'Model B Id', 'value'=>'modelbrelationname.id'), // *HERE SHOW ANOTHER FIELD OF MODEL B*
    ),  
)); 

OK, I figured out how to solve this after discovering the $data var in CGridView which holds the corresponding row data. 好的,我在CGridView发现了包含相应行数据的$data CGridView后,想出了解决方法。

Simply add this: 只需添加以下内容:

array('name'=>'Model B Another Field',
      'value'=> 'ModelB::model()->FindByPk($data->id)->another_field'
),

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM