Yii2 ListView

时间:2016-10-08 22:55:20

标签: php listview yii2

我在视图中有一个典型的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项?

2 个答案:

答案 0 :(得分:1)

您可以访问dataProvider的models数组a获取第一个和最后一个

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->gestModels();
        $first = myModels[0];
        $last =  myModels[$dataProvide['totalCount']-1];

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

        return $this->render('view', [
            'model' => $model,
            'dataProvider' => $dataProvider,
        ]);
    }

答案 1 :(得分:1)

你应该试试:

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

详细了解resetend