当有多个模型时,GridView 中的分页计算所有记录,但在 Yii2 中预期行数

Kri*_*ode 1 php pagination gridview dataprovider yii2

当 GridView 中有 2 个模型并且在一行中插入了来自第二个模型的 1 个以上的记录时,我遇到了分页问题。

DataProvider 看起来像:

    $query = Risks::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => array('pageSize' => 5),
    ]);

    $query->joinWith(['solutions']);
Run Code Online (Sandbox Code Playgroud)

Ins第二个模型我有功能:

  public function getSolutionValues (){

     ......
    $content ='';

    foreach ($order as $o){
        $model = Solutions::findOne($o);
        $content.= '<p>'.Html::encode($model->solution).'</p>';
    }
    return $content;

}
Run Code Online (Sandbox Code Playgroud)

在 GridView 我调用这个函数:

            [
            'attribute' => 'solutions',
            'format' => 'raw',
            'value' => function ($model) {
                return $model->getSolutionValues();
            },
        ],
Run Code Online (Sandbox Code Playgroud)

例如,这里只有前 3 条记录(而不是 5 条)可见,因为第一行插入了来自不同模型的 3 个条目。(如果插入一个解决方案,那么一切都可以) 在此处输入图片说明

如果我从列表中删除一个解决方案,分页不会改变,我必须从数据库中删除解决方案,然后只有分页不计入该条目。

Cod*_*ank 5

它很晚才安静,但它可能会帮助面临同样问题的其他人。

这是意料之中的,当您尝试对涉及一对多关系的 JOIN 查询进行分页时会发生这种情况,因为由于一对多关系,JOIN 查询会为每个主记录返回许多行。解决方案是指定 select unique 并仅从主表中选择那些列。

在您的情况下,这应该有效:

$query = Risks::find()->distinct()->joinWith(['solutions']);

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => array('pageSize' => 5),
    ]);
Run Code Online (Sandbox Code Playgroud)