我正在使用PHP Yii并尝试显示从数据库中保存的值派生的值。
这是我的模特
模型 - TradeRecord
public type; //Type:'1' means Buy,'2' means Sell. $model->type is get from database
public function attributeLabels(){
return array(
/* some attribute */
'type'=>'Trade Type' //This is also the column header
}
public function getTradetype(){
return array('1' => 'Buy', '2' => 'Sell');
}
查看索引
<!-- dropdown list-->
<?php echo CHtml::dropDownList('TradeRecord[type]', $model->type, //any better solution?
$model->tradetype,
array('empty' => '(select..)','class'=>'form-control'));
?>
<!--CgridView column-->
<?php $this->widget('bootstrap.widgets.BsGridView', array(
'id'=>'trade-record-grid',
'dataProvider'=>$dp,
'columns'=>array(
array(
'header' => '$data->getAttributeLabel("type")', //not worked!
'name'=>'type',
'value'=>'($data->tradetype($data->type))', //not worked!
),
),
如您所见,我在模型中为映射关系设置了一个getTradetype方法。 我试着让代码干净。但是我认为对于下拉列表案例可能有更好的解决方案。至于Cgridview案例,我的代码根本不起作用。 感谢。
答案 0 :(得分:0)
对于网格视图,将函数更改为返回字符串,而不是数组
public function getTradetype(){
$types = array('1' => 'Buy', '2' => 'Sell');
return isset($types[ $this->type ]) ? $types[ $this->type ] : 'undefined';
}
如果你想在标题中使用变量的默认名称,你不需要在数组中指定它,值和名称就足够了,我想你没有正确设置名称
答案 1 :(得分:0)
作为Tinybyte's answer的替代方案,我通常将关系作为数组并使用类似于他/她的答案的函数。
public static $tradeTypes = array('1' => 'Buy', '2' => 'Sell');
...
public function getTradeType() {
return isset(self::$tradeTypes[ $this->type ]) ? self::$tradeTypes[ $this->type ] : 'undefined';
}
这样就可以将TradeRecord::tradeTypes
用作下拉列表选项,将tradeType
用作网格视图的value
。