Yii2中的完全自定义过滤器

时间:2018-12-17 13:50:15

标签: gridview yii2

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

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

现在,我想为此“百分比”字段添加搜索过滤器,但问题出在我的表中,没有百分比,因此当我尝试搜索百分比时,它仅检查标记值。

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

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

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

1 个答案:

答案 0 :(得分:1)

看看this page

主要步骤是:

  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小部件,则必须定义如何排序和使用表达式(如有必要)。看看this link

的故事