gridview - Yii2 中的完全自定义过滤器
问题描述
我有一个gridview,我需要用一些计算逻辑显示一列的百分比。
完成了,我在一列中有一个数值,表示“百分比”,但在表中我只有“标记”字段。
现在我想为这个“百分比”字段添加一个搜索过滤器,但问题是在我的表中没有百分比,所以当我尝试搜索百分比时,它只检查标记值。
如何在 gridview 过滤器中搜索“百分比”值,而不是搜索“标记”字段。
https://www.screencast.com/t/IfUezWnJ
实际上,我在数据库列“电池”中有一个值,例如“1256”,经过一些计算,我在 gridview 中显示了电池百分比。但在 gridview 搜索过滤器中,我想按百分比搜索。但我不能,因为在表格中我们没有百分比。
解决方案
看看这个页面。
主要步骤是:
- 在基本模型中创建一个虚拟属性(getter 方法),它执行从真实标记字段获取百分比所需的微积分:
getPercentage()
- 在搜索模型中,在基础模型中添加一个与虚拟属性同名的公共属性(属性)(
public $percentage
) - 在 rules 方法中,为这个新属性添加一个安全验证器。
- 在搜索方法中,将正确的 where 子句添加到查询中。如果百分比计算很复杂或涉及子查询,这可能会有点棘手。一个简单的情况是,如果百分比是从另一个字段获得的,比如说
max_value
. 在这种情况下,您可以使用如下行:($query->andWhere ('ilike','mark',$this->percentage/100*max_value)
只是一个示例。肯定ilike
不是这种情况的最佳运算符。) - 使用 gridview 小部件中的虚拟字段。
如果您需要子查询或 with 语句来获取百分比,则需要在 $query 对象中添加一些额外的语句,但主要步骤是相同的。
如果您想在 gridview 小部件中添加排序功能,您必须定义如何排序和在必要时使用表达式。看看这个链接
推荐阅读
- python - Odoo 11 社区工资单模块
- c# - 通过 Linq 左连接使用来自多个 MongoDB 集合的信息填充类
- ios - 代号一构建错误,无法在IOS应用中构建
- vba - 从特定工作表复制未知范围
- linux - IFS=';' 读取 -a 数组不拆分“;” 当输入包含换行符时正确
- javascript - TypeError:无法读取未定义的属性“id”(也是“startWith”)
- python - 拆分文本而不分开,例如“纽约”
- javascript - 如何验证 IP 地址以确保用户在四部分中输入 3 位数字?
- ios - NSAttributed 字符串文档类型问题
- angular - 将一系列嵌套的 Promise 转换为 @Effect