2016-10-08 2 views
1

Ich habe einen typischen Listview-Widget in einer Ansicht wie folgt:Yii2 erstes und die letzte Element in der 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, 
     ]); 
    } 

In der Ansicht eine Liste von Verses Modell wiedergegeben wird und der Pager des Listview ist ebenfalls verfügbar.

Ich möchte einige Details zum Seitentitel hinzufügen. Diese Details sind Daten aus dem ersten und letzten Datensatz des Modells Verses, das in der Liste wiedergegeben wird.

Ich habe versucht, min() und max() PHP-Funktionen zu verwenden, um die ersten und die letzten Datensätze in der Ansicht wie folgt zu erhalten:

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

Allerdings ist es das ultimative erste Datensatz in Bezug auf lose Seite der aktuellen Pager zurück . Mit anderen Worten, es gibt den verse_id Wert des ersten Elements der Liste nicht zurück.

Gibt es eine Möglichkeit, den ersten, letzten oder sogar einen bestimmten n-ten Eintrag des ListView zu erhalten?

Antwort

1

Sie sollten einfach versuchen:

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

Lesen Sie mehr über reset und end.

1

Sie auf die Modelle Array zugreifen konnte von Datenprovider ein, die Flirts und dort den letzten

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]; 

oder können Sie

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

und für die Seite verwenden, können Sie anstelle der Gesamtzahl zählen verwenden

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

Wunderbar, aber in Paging sollte 'getTotalCount()' durch 'getCount()' ersetzt werden und das Modell wird von 'getModels()' wie folgt abgerufen: '$ s = $ dataProvider-> getModels(); $ start = $ s [0] -> Vers_id; $ end = $ dataProvider-> getCount() - 1 + $ start; '. [** Refrence **] (http://www.yiiframework.com/doc-2.0/yii-data-activedataprovider.html) – SaidbakR

+0

@seems .. Ich habe die Antwort aktualisieren .. – scaisEdge

+0

'totalCount' wird zurückgeben die Gesamtzahl der Datensätze des Modells, unabhängig von der aktuellen Seite. 'GetCount' ist hier korrekt. – SaidbakR

Verwandte Themen