我得到一个奇怪的结果。 在我的CustomerQuery中,在all()函数之前应用了一些过滤器。
(如
$this->andWhere(['profiles.type'=>'f']);
)
在每个 find()-> all()之前应用过滤器,但在gridview之前的分页计数中声明 显示1-6个 12 元素 如果我使用Yii的调试器检查查询,则可以看到yii用于确定元素数量的计数查询缺少了 profiles.type =“ f” ,而实际查询没有。 / p>
这是一个错误吗?我是否需要使用另一个函数来代替and在哪里对计数查询应用相同的过滤器?
答案 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);
}
...