Yii2 gridview过滤器虚拟属性文本字段默认显示数字

时间:2017-03-20 09:08:45

标签: gridview yii2 filtering virtual-attribute

型号:

public $FnGdiff;

public function getFnGdiff() {
    return $this->FnG - $this->fd;
}

ModelSearch:

public function rules() {
    return [
        [['fnGdiff'], 'safe'],
    ];
}

现在,如果我将fnGdiff添加到gridview,默认情况下,我们可以在文本字段中执行过滤,总是一个数字(?!)。它是零,-6等。这是一个功能,还是一个bug,还是我忘记了调整的东西?非常感谢提前!

解决方案:

型号:

public function getFnGdiff() {
    return $this->FnG - $this->fd;
}

ModelSearch:

public $fnGdiff;

public function rules() {
    return [
        [['fnGdiff'], 'safe'],
    ];
}
...

(所以这个奇怪的数字已经消失,但是不可能以这种方式过滤计算出来的虚拟属性,你必须从DB中选择这样一个字段才能做到这一点)< / em>的

2 个答案:

答案 0 :(得分:0)

如果你添加fnGdiff你的gridView ..你调用函数getFnGdiff()..它似乎默认返回0 ..

 could be You want show  $FnGdiff

注意函数和变量的命名约定

    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        .....
        'FnGdiff',   // $FnGdiff content
        'fnGdiff',  // function getFnGdiff() result 

你应该将vars和function的代码移动到searchModel

ModelSearch

 public $FnGdiff;

 public function getFnGdiff() {
   return $this->FnG - $this->fd;
}

并从模型中删除此代码..

答案 1 :(得分:0)

过滤字段是搜索模型的渲染,其属性传递给GridView。创建该模型时,当模型在发送查询之前是初始值时,虚拟属性$ FnGdiff由指定值设置。你的属性$ FnGdiff是deafault set 0($ this-&gt; FnG - $ this-&gt; fd,在新模型中它是:null - null = 0),并且该值在文本过滤器字段中呈现。所以你应该只返回没有新记录的指定值。试试这个:

public function getFnGdiff() {
    return $this->isNewRecord ? '' : $this->FnG - $this->fd;
}