【问题标题】:Yii View, Replacing some database values in CGridViewYii View, 替换 CGridView 中的一些数据库值
【发布时间】:2012-06-15 10:22:08
【问题描述】:

我是 Yii 的新手,对不起,如果我的问题可能很愚蠢,我正在使用 CGridView 在表格中显示我的数据库的一些字段:

<?php echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); ?>
<div class="search-form" style="display:none">
<?php $this->renderPartial('_search',array(
    'model'=>$model,
 )); ?>
</div><!-- search-form -->

<?php 


 $this->widget('zii.widgets.grid.CGridView', array(
   'id'=>'show-grid',
   'dataProvider'=>$model->search(),
   'filter'=>$model,
   'columns'=>array(
       'id',
       'title',
       'brief',
       'tbl_season_id',
       'on_season',

                array(
                    'name'=>'status',
                    'value'=>'Lookup::item("NewsStatus",$data->status)',
                    'filter'=>  Lookup::items('NewsStatus'),
                ),
        array(
        'class'=>'CButtonColumn',
        ),
        ),
      )); ?>
    </div>

我想替换一些显示的值,例如,on_season 字段是二进制的,在表中值是 0 或 1,我想将此值更改为 YesNO ,

tbl_season_id是另一个表的外键,我想获取季节的名称并将其代替用户无法理解的id。

【问题讨论】:

  • 对于第一个:您必须执行与“状态”列相同的操作。将'type'属性设置为'raw',然后你可以在'value'属性中做任何你需要的事情(例如'$data->on_season?“Yes”:“No”')。第二个:在你的模型中创建一个关系(例如,称为“季节”),然后将关系放在网格列中:“season.name”。
  • 成功了,我也可以替换标题值吗?
  • 有一个名为 'header' 的属性:P 有关可用属性的更多信息:yiiframework.com/doc/api/1.1/CGridColumn

标签: yii


【解决方案1】:

您可以参考这篇 wiki 文章,根据自己的喜好自定义列值

Yii Documentataion: cgridview-render-customized-complex-datacolumns

请记住,value 属性可以是表达式字符串,稍后会针对行的每个数据对其进行评估。所以你有一个方法调用,它可以根据该行的当前值为你动态计算任何值。

【讨论】:

    【解决方案2】:

    让你有两张桌子

    1):客户 2):项目


    关系是一个客户有很多项目。

    在模型中


    和客户模型的关系是(客户表模型名称是Client

     class Client extends CActiveRecord{
        }
    

    和关系()方法;

     return array(
          'projects' => array(self::HAS_MANY, 'Projects', 'clients_id'),
      );
    

    项目模型关系是(项目表模型名称是Projects

          class Projects extends CActiveRecord{
             }
    

    和关系()方法;

       return array(
              'clients' => array(self::BELONGS_TO, 'Client', 'clients_id')
         );
    

    现在 现在您可以使用以下内容获取 client_name 替换 proejct 表中的 client_id 在 CGridView 中


      'dataProvider' => $model->search(),
      'columns' => array(
             'id',
              'project_name',
         array(
            'name' => 'client Name',
            'value' => '$data->clients->name',   //where name is Client model attribute 
           ),
        )
    

    和 CDetailView中的项目视图页面可以使用如下

    'data' => $model,
    'attributes' => array(
                   'id',
                  'project_name',
             array(
                'name'=>'Client Name',
                'value'=>$model->clients->name ,
            ),  
    

    )


    如果您与公司表有客户关系(一家公司有很多客户) 客户端模型

       'company' => array(self::BELONGS_TO, 'Company', 'company_id'),
    

    您也可以通过以下方法获取公司名称 索引(CGridview

       array(
          'name' => 'client Name',
        'value' => '$data->clients->company->name', //where name is company model attribute 
        ),
    

    在视图中CDetailView

     array(
        'name'=>'Client Name',
         'value'=>$model->clients->company->name ,
            ),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多