yii2 - 错误的 GridView 总行数
问题描述
我得到一个奇怪的结果。在我的 CustomerQuery 中,我在 all() 函数之前应用了一些过滤器。
(喜欢
$this->andWhere(['profiles.type'=>'f']);
)
过滤器在每个find()->all()之前应用,但在 gridview 之前的分页计数中显示12 个元素中的 1-6 如果我使用 Yii 的调试器检查查询,我可以看到 yii 使用的计数查询确定元素的数量缺少profiles.type =“f”,而实际查询没有。
这是一个错误吗?我需要使用另一个函数来代替 andWhere 将相同的过滤器应用于计数查询吗?
解决方案
好的,这似乎是预期的结果(不过,我希望并且肯定更喜欢 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);
}
...
推荐阅读
- c++ - 为什么我们在重载“>>”和“<<”时需要通过引用传递?
- java - 如何在 selenium 自动化测试期间模拟离线互联网连接,然后使用 BrowserMobProxy 再次打开它?
- spring-cloud-config - 我可以从 Hashicorp Vault 获取 Spring Cloud Config Server 的 encrypt.key 吗?
- amazon-web-services - 由于 aws-auth ConfigMap 问题,无法更新 EKS NodeGroup
- java - 你能强制一个函数不返回前一个堆栈,而只是在 Java Servlet 中发送重定向吗?
- javascript - 使用语言服务器查找范围内的所有函数
- reactjs - ReactJS - 在文件之间传递 useState 的替代方法
- firebase-authentication - 为什么我的 gmail 登录无法通过 firebase
- html - 有没有办法在使用 jQuery/HTML 的网站上捕获视频内容并将其保存到文件中
- elasticsearch - 远程异常转换失败