【问题标题】:How to get previous and next row model ID in yii2 gridview data row如何在yii2 gridview数据行中获取上一行和下一行模型ID
【发布时间】:2019-01-28 10:30:37
【问题描述】:

在 GridView 小部件中并显示我从自定义查询中获取的 ActiveDataprovider 结果时,我想在显示记录时获取下一行和上一行 $model->id,我需要做的是显示上一个和下一个的链接在阅读模式下发帖时,我的 gridview 已经生成了指向帖子视图的链接,但似乎没有获取下一个 DB 行记录 ID 的选项

我已经尝试在可用函数中使用默认值,但它们似乎没有保存任何相关数据

GridView::widget([
    'dataProvider' => $dataProvider,
    ...
    'columns' => [
        ...
        [
           'label'=>'Post Name',
           'format' => 'raw',
           'value'=>function ($data, $key, $index, $obj) {
                // this is what i have right now
                return Html::a($data->name, ['view', 'id' => $data->id]);

                //ideally i would like something like this
                return Html::a($data->name, ['view', 
                     'id' => $data->id,
                     'prev' => $prev->id,
                     'next' => $next->id
                ]);
            },
        ],
    ],
    ....
)];

【问题讨论】:

    标签: yii2 yii2-advanced-app yii2-basic-app


    【解决方案1】:

    尝试在value callback 中传递$dataProvider

    GridView::widget([
        'dataProvider' => $dataProvider,
        ...
        'columns' => [
            ...
            [
               'label'=>'Post Name',
               'format' => 'raw',
               'value'=>function ($data, $key, $index, $obj) use($dataProvider) {
    
    
                    // Check prev and next object
                    $models = $dataProvider->models;
                    $prev = ($index>0) ? $models[$index-1] : null;
                    $next = ($index < ((count($model)-1)) ? $models[$index+1] : null; 
    
                    //ideally i would like something like this
                    return Html::a($data->name, ['view', 
                         'id' => $data->id,
                         'prev' => ($prev != null) ? $prev->id : '',
                         'next' => ($news != null) ? $next->id : '',
                    ]);
                },
            ],
        ],
        ....
    )];
    

    【讨论】:

    • 我使用了 $index 而不是 $key 并为我完成了这项工作,非常感谢。
    【解决方案2】:

    由于$index 是模型的正确键,我们可以这样做。无需在每次调用中调用$models = $dataProvider-&gt;models; 使其更快。

    $keys = $dataProvider->keys;
    
    GridView::widget([
        'dataProvider' => $dataProvider,
        ...
        'columns' => [
            ...
            [
               'label'=>'Post Name',
               'format' => 'raw',
               'value'=>function ($data, $key, $index, $obj) use ($keys) {
    
    
                    // Check prev and next object
                    $prevId = ($key > 0) ? $keys[$index-1] : '';
                    $nextId = ($key < ((count($keys)-1)) ? $keys[$index+1] : '';
    
                    return Html::a($data->name, ['view',
                        'id' => $data->id,
                        'prev' => $prevId,
                        'next' => $nextId,
                    ]);
                },
            ],
        ],
        ....
    )];
    

    【讨论】:

    • 我收到Undefined variable: keys
    • @user2511599 我在第一行定义了$keys
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多