Yii2 ListView 中的第一个和最后一个项目

问题描述 投票:0回答:2

我在视图中有一个典型的 ListView 小部件,如下所示:

public function actionView($id)         
    {
        $model = $this->findModel($id);
        $dataProvider = new \yii\data\ActiveDataProvider(['query' => \app\models\Verses::find()->where(['sura_id' =>$id])->with('sura')]);          
        return $this->render('view', [
            'model' => $model,
            'dataProvider' => $dataProvider,
        ]);
    }

在视图中呈现

Verses
模型的列表,并且ListView的分页器也可用。

我想在页面标题中添加一些详细信息。这些详细信息是来自列表中呈现的

Verses
模型的第一个和最后一个记录的数据。

我尝试使用

min()
max()
PHP 函数来获取视图中的第一条和最后一条记录,如下所示:

$min = min($model->verses);
echo $min->verse_id;

但是,它返回最终的第一条记录,而不是当前寻呼机页面。换句话说,它不会返回列表第一项的

verse_id
值。

有没有办法获取ListView的第一个、最后一个甚至特定的第n个项目?

php listview yii2
2个回答
1
投票

你应该简单地尝试一下:

$models = $dataProvider->getModels();
$first = reset($models);
$last = end($models);

了解更多关于

reset
end


1
投票

您可以访问 dataProvider 的模型数组,获取第一个和最后一个

public function actionView($id)         
    {
        $model = $this->findModel($id);
        $dataProvider = new \yii\data\ActiveDataProvider(['query' => \app\models\Verses::find()->where(['sura_id' =>$id])->with('sura')]);  


        $first = $dataProvider['models'][0];
        $last =  $dataProvider['models'][$dataProvide['totalCount']-1];

或者你可以使用

        $myModels = $dataProvider->getModels();
        $first = myModels[0];
        $last =  myModels[$dataProvide['totalCount']-1];

对于页面,您可以使用计数而不是总计数

        return $this->render('view', [
            'model' => $model,
            'dataProvider' => $dataProvider,
        ]);
    }
© www.soinside.com 2019 - 2024. All rights reserved.