问题描述
在我的 GridView 中,返回的行数与右上角显示的不同。在角落,网格计数 7450 行,但实际上它返回 4351 行。
这是错误行为的示例:Screenshot 在示例中,Gridview 呈现 1 行(这是正确的) 但角落里的摘要说“显示 4 个项目中的 1-1 个。
通过阅读这篇文章,我可能已经找到了导致错误的原因:{{3 }}。这个错误也会导致分页被破坏。
不幸的是,这个解决方案没有解决我的问题。或者我可能遗漏了一些东西。
我的情况
我需要在 Gridview 中显示关系数据,所以我在 AuthorsProjectPpi 模型中创建了这个关系:
public function getInstitutionName(){
return $this->hasOne(AuthorsInstitution::className(),['md_institution_tokens'=>'ppi_organization']);
}
问题出现在AuthorsProjectPpiSearch模型的搜索功能中:
public function search($params)
{
$query = AuthorsProjectPpi::find();
$query->joinWith('institutionName');
...
}
那个 Join 产生了 7450 行(所以 Gridview 右上角的行数是 7450)但是 Gridview 只实例化了 4351 行(这是我想要的数字)。
如果我评论加入:
public function search($params)
{
$query = AuthorsProjectPpi::find();
//$query->joinWith('institutionName');
...
}
右上角显示正确的数字(4351),关系列也显示正确,但我无法按该列过滤结果。
我真的无法解决这个问题。
如果有帮助,我正在使用 Kartik 的 Gridview。
解决方法
已解决
我只是忘了将 GroupBy 放在查询中...
public function search($params)
{
$query = AuthorsProjectPpi::find();
$query->joinWith('institutionName')->groupBy('id');
...
}
这完全解决了问题。