首页 > 解决方案 > Yii2 中的完全自定义过滤器

问题描述

我有一个gridview,我需要用一些计算逻辑显示一列的百分比。

完成了,我在一列中有一个数值,表示“百分比”,但在表中我只有“标记”字段。

现在我想为这个“百分比”字段添加一个搜索过滤器,但问题是在我的表中没有百分比,所以当我尝试搜索百分比时,它只检查标记值。

如何在 gridview 过滤器中搜索“百分比”值,而不是搜索“标记”字段。

https://www.screencast.com/t/IfUezWnJ

实际上,我在数据库列“电池”中有一个值,例如“1256”,经过一些计算,我在 gridview 中显示了电池百分比。但在 gridview 搜索过滤器中,我想按百分比搜索。但我不能,因为在表格中我们没有百分比。

标签: gridviewyii2

解决方案


看看这个页面

主要步骤是:

  1. 在基本模型中创建一个虚拟属性(getter 方法),它执行从真实标记字段获取百分比所需的微积分:getPercentage()
  2. 在搜索模型中,在基础模型中添加一个与虚拟属性同名的公共属性(属性)(public $percentage
  3. 在 rules 方法中,为这个新属性添加一个安全验证器。
  4. 在搜索方法中,将正确的 where 子句添加到查询中。如果百分比计算很复杂或涉及子查询,这可能会有点棘手。一个简单的情况是,如果百分比是从另一个字段获得的,比如说max_value. 在这种情况下,您可以使用如下行:($query->andWhere ('ilike','mark',$this->percentage/100*max_value)只是一个示例。肯定ilike不是这种情况的最佳运算符。)
  5. 使用 gridview 小部件中的虚拟字段。

如果您需要子查询或 with 语句来获取百分比,则需要在 $query 对象中添加一些额外的语句,但主要步骤是相同的​​。

如果您想在 gridview 小部件中添加排序功能,您必须定义如何排序和在必要时使用表达式。看看这个链接


推荐阅读