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

Yii2 gridview过滤器虚拟属性文本字段默认显示数字,gridview,yii2,filtering,virtual-attribute,Gridview,Yii2,Filtering,Virtual Attribute,型号: public function rules() { return [ [['fnGdiff'], 'safe'], ]; } 模型搜索: public $FnGdiff; public function getFnGdiff() { return $this->FnG - $this->fd; } public function getFnGdiff() { return $this->FnG - $this->

型号:

public function rules() {
    return [
        [['fnGdiff'], 'safe'],
    ];
}
模型搜索:

public $FnGdiff;

public function getFnGdiff() {
    return $this->FnG - $this->fd;
}
public function getFnGdiff() {
    return $this->FnG - $this->fd;
}
现在,如果我将
fnGdiff
添加到gridview,默认情况下,文本字段中总是有一个数字(?!),我们可以在其中进行过滤。它是零,-6,等等。这是一个特性,还是一个bug,还是我忘记了一些需要调整的东西?非常感谢

解决方案:

型号:

public function rules() {
    return [
        [['fnGdiff'], 'safe'],
    ];
}
模型搜索:

public $FnGdiff;

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

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

如果您在gridView中添加
fnGdiff
。。调用函数getFnGdiff()。。这似乎在默认情况下返回0

public $fnGdiff;

public function rules() {
    return [
        [['fnGdiff'], 'safe'],
    ];
}
...
注意函数和变量的命名约定

 could be You want show  $FnGdiff
您应该将vars和function的代码移动到searchModel

模型搜索

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

并从模型中删除此代码

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

 public $FnGdiff;

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

我想我必须添加
fnGdiff
,因为
fnGdiff
是空的。你的评论是什么意思。。明显的FnGdiff。。是空的。。更好地解释。。asnwer更新了sume suggestion.。如果不是这样,那么我应该如何定义计算虚拟属性,以便能够过滤它,默认情况下文本字段中没有任何数字?这里可以找到一些示例。。。但另一个问题是关于你的..以上..谢谢我已经看过这篇文章了,我找不到任何细节可以说明我做错了什么,或者我应该做些什么来让这种奇怪的行为消失。为什么它也可以是-6?我认为它在某种程度上保留了最后计算的值或类似的东西。属性$FnG和$fd如何?在哪里初始化?这些是从DBTry初始化的,在初始化模型之后调试它们的值。检查为什么$this->FnG-$this->fd equal-6。尝试调试它,例如,
throw new\Exception('Fng:'.var_export($this->Fng,true)。'fd:'.var_export($this->fd,true))