【发布时间】:2015-05-03 21:34:36
【问题描述】:
当 GridView 中有 2 个模型并且在一行中从第二个模型插入超过 1 条记录时,我遇到了分页问题。
DataProvider 看起来像:
$query = Risks::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => array('pageSize' => 5),
]);
$query->joinWith(['solutions']);
在第二个模型中我有功能:
public function getSolutionValues (){
......
$content ='';
foreach ($order as $o){
$model = Solutions::findOne($o);
$content.= '<p>'.Html::encode($model->solution).'</p>';
}
return $content;
}
在 GridView 中我调用了这个函数:
[
'attribute' => 'solutions',
'format' => 'raw',
'value' => function ($model) {
return $model->getSolutionValues();
},
],
例如,这里只显示前 3 条记录(而不是 5 条),因为第一行插入了来自不同模型的 3 个条目。 (如果插入一个解决方案,那么一切都可以)
如果我从列表中删除一个解决方案,分页不会改变,我必须从数据库中删除解决方案,然后只有分页不计入该条目。
【问题讨论】:
-
分页不依赖于行内显示的内容。您的查询很可能有问题。展示它是如何形成的。我还建议为此目的使用关系yiiframework.com/doc-2.0/…。
-
实际上所有查询都是
$query = Risks::find(); $query->joinWith(['solutions']);只有在搜索模型中的$this->load($params);之后还有更多,但据我了解 - 这仅用于搜索。你的意思是分页关系? -
如果使用关系是为了得到一个解决方案列表,那么我有特殊的顺序,我不能从上到下全部查询
-
如果没有
$query->joinWith(['solutions']);,是否返回正确的分页? -
是的,那么它是正确的,但是由于未定义的表而无法过滤或排序:(
标签: php gridview pagination yii2 dataprovider