GridView总行数错误

时间:2019-03-04 11:46:52

标签: yii2

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

(如

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

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

这是一个错误吗?我是否需要使用另一个函数来代替and在哪里对计数查询应用相同的过滤器?

1 个答案:

答案 0 :(得分:0)

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

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

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);
}
...