Yii2 GridView中按规则取整数值及关联字段访问问题
嘿,我来帮你搞定这两个Yii2 GridView的问题!
一、GridView单元格数值取整的正确姿势
你之前用rowOptions没生效很正常,因为rowOptions是用来设置整行的样式(比如背景色、CSS类)的,根本不是用来处理单元格数值的~ 给你两种靠谱的处理方式:
方式1:自定义列的value属性处理
直接在GridView的列配置里,用匿名函数手动处理数值取整,还能精准控制小数位数:
[ 'attribute' => 'val_liq_moeda', 'value' => function ($model) { // round()默认四舍五入,刚好匹配你19.999→20.000、49.999→50.000的需求 // 再用number_format格式化为三位小数 return number_format(round($model->getAttribute('val_liq_moeda')), 3); }, ],
方式2:用Yii内置的Formatter组件
如果想更规范统一,也可以用Yii自带的格式化工具,还能灵活配置取整规则:
[ 'attribute' => 'val_liq_moeda', 'format' => [ 'decimal', 3, // 指定保留三位小数 ['roundingMode' => \NumberFormatter::ROUND_HALF_UP] // 设置四舍五入规则 ], ],
二、关联表字段“Unknown property”的解决办法
这个报错的原因很直白:Yii2的ActiveRecord模型只会自动生成自身数据库表字段对应的属性,你通过JOIN查出来的val_liq_moeda是关联表的字段,不在主模型的默认属性列表里,所以直接$model->val_liq_moeda会找不到。
给你两种实用的解决办法:
方法1:在主模型中显式声明属性
直接在你用来查询数据的主模型里加一行代码:
public $val_liq_moeda;
注意字段名要和查询语句里的完全一致(大小写敏感哦,比如查询里写的是val_liq_moeda,属性名就别写成ValLiqMoeda),之后就能直接用$model->val_liq_moeda访问了。
方法2:用getAttribute()方法临时访问
如果不想修改模型文件,也可以用Yii提供的getAttribute()方法来获取这个字段值:
$model->getAttribute('val_liq_moeda');
这种方式适合临时用到这个字段的场景,不用改动模型代码。
⚠️ 额外提醒:一定要确保你的JOIN查询里明确select了这个字段,比如在ActiveQuery里要写:
$query->select(['t.*', 'related_table.val_liq_moeda']) ->joinWith('relatedTable'); // 这里的relatedTable是你定义的关联关系名
要是没select这个字段,不管用哪种方法都取不到值哦!
内容的提问来源于stack exchange,提问作者Rui Sousa
相关产品推荐
相关产品推荐

