首页 > 解决方案 > 错误的 GridView 总行数

问题描述

我得到一个奇怪的结果。在我的 CustomerQuery 中,我在 all() 函数之前应用了一些过滤器。

(喜欢

$this->andWhere(['profiles.type'=>'f']);

)

过滤器在每个find()->all()之前应用,但在 gridview 之前的分页计数中显示12 个元素中的 1-6 如果我使用 Yii 的调试器检查查询,我可以看到 yii 使用的计数查询确定元素的数量缺少profiles.type =“f”,而实际查询没有。

这是一个错误吗?我需要使用另一个函数来代替 andWhere 将相同的过滤器应用于计数查询吗?

标签: yii2

解决方案


好的,这似乎是预期的结果(不过,我希望并且肯定更喜欢 count 函数来执行完全相同的查询)。

要将相同的过滤器/位置应用于实际查询和计数查询,您必须覆盖 ActiveQuery 的计数方法。这是一个例子

class ProfileQuery extends \yii\db\ActiveQuery{
...
    public function standardFilters(){
        $this->andWhere(['not',['table_name.status'=>2]]);
    }

    public function all($db = null){
        $this->standardFilters();
        return parent::all($db);
    }
public function count($q = '*', $db = null) {
    $this->standardFilters();
    return parent::count($q, $db);
}
...

推荐阅读