型号:
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>的
答案 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;
}