2016-02-19 41 views
1

我想在我的視圖中使用分頁,但我無法弄清楚如何將它與find()方法結合使用。yii2中的數組分頁

獲取正確的頁面數,但它始終顯示數據庫中的所有值。我想每頁看到15條評論。

這裏是我的ViewAction這一控制器:

public function actionView($id) { 
    $query = UrComment::find()->where(['IsDeleted' => 0]); 

    $pagination = new Pagination(['totalCount' => $query->count(), 'pageSize'=>12]); 
    return $this->render('view', [ 
      'model' => $this->findOneModel($id), 
      'comment' => UrComment::findComment($id), 
      'pagination'=> $pagination 
    ]); 
} 

而且這是我得到的評論:

public static function findComment($id) 
{ 
    if (($model = UrUser::findOne($id)) !== null) { 
     $Id=$model->Id; 
     $comment = UrComment::find()->where(['Rel_User' => $Id])->all(); 
     return $comment; 
    } else { 
     throw new NotFoundHttpException('The requested page does not exist.'); 
    } 
} 

我試圖用這樣的:

public function actionView($id) { 
    $query = UrComment::find()->where(['IsDeleted' => 0]); 
    $pagination = new Pagination(['totalCount' => $query->count(), 'pageSize'=>12]); 
    $comment= UrComment::findComment($id); 
    $comment->offset($pagination->offset) 
     ->limit($pagination->limit) 
     ->all(); 

    return $this->render('view', [ 
       'model' => $this->findOneModel($id), 
       'comment' =>$comment, 
       'pagination'=> $pagination 
    ]); 
} 

但我得到這個錯誤:

Call to a member function offset() on array

然後我在視圖中顯示出來:

<?php 

use yii\helpers\Html; 
use yii\widgets\DetailView; 
use yii\helpers\Url; 
/* @var $this yii\web\View */ 
/* @var $model backend\modules\users\models\UrUser */ 

$this->title = $model->Name; 
$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Użytkownicy'), 'url' => ['index']]; 
$this->params['breadcrumbs'][] = $this->title; 
?> 
<div class="ur-user-view"> 

    <h1><?= Html::encode($this->title) ?></h1> 

    <p> 
     <?= Html::a(Yii::t('app', 'Aktualizuj'), ['update', 'id' => $model->Id], ['class' => 'btn btn-primary']) ?> 
     <?= 
     Html::a(Yii::t('app', 'Usuń'), ['delete', 'id' => $model->Id], [ 
      'class' => 'btn btn-danger', 
      'data' => [ 
       'confirm' => Yii::t('app', 'Jesteś pewien, że chesz usunąć tego użytkownika?'), 
       'method' => 'post', 
      ], 
     ]) 
     ?> 
    </p> 

    <?= 
    DetailView::widget([ 
     'model' => $model, 
     'attributes' => [ 
      'Id', 
      'Name', 
      'Surname', 
      'BirthDate', 
      'Login', 
      'Email:email', 
      ['attribute' => 'Rel_Sex', 'value' => (isset($model->relSex->Name)? $model->relSex->Name : "Nie wybrano")], 
      ['attribute' => 'Rel_Language', 'value' => (isset($model->relLanguage->Name)) ? $model->relLanguage->Name : "Nie wybrano"], 
      ['attribute' => 'Rel_Country', 'value' => (isset($model->relCountry->Name)) ? $model->relCountry->Name : "Nie wybrano"], 
      ['attribute' => 'Rel_Category', 'value' => (isset($model->relUserCategory->Name)) ? $model->relUserCategory->Name : "Nie wybrano"], 
     ], 
    ]) 
    ?> 

Komentarze użytkownika: <?= $model->Name.' '.$model->Surname;?><br><br> 


    <?php foreach ($comment as $comm): ?> 

    <?= Html::a(Yii::t('app', 'Edytuj'), ['update-user-comment', 'id' => $comm->Id], ['class' => 'btn btn-primary']) ?> 
     <?= 
     Html::a(Yii::t('app', 'Usuń'), ['delete-comment', 'id' => $comm->Id], [ 
      'class' => 'btn btn-danger', 
      'data' => [ 
       'confirm' => Yii::t('app', 'Jesteś pewien, że chesz usunąć tego użytkownika?'), 
       'method' => 'post', 
      ], 
     ]) 
     ?> 
      <p><?= $comm->Text ?></p> 

    <hr> 
    <?php endforeach; ?> 
<?php 
    echo \yii\widgets\LinkPager::widget([ 
    'pagination' => $pagination, 
]); 
?> 

</div> 
</div>  
</div> 

如何限制使用分頁的UrComment::findComment($id)

編輯:

我想我理解你,我想我已經做了,你告訴我你的答案的一切,但現在我有另一個問題。我只需要在查看評論下面顯示只有這個id的只有這個人不是所有的評論。

這是我現在有:

的ActionView:

public function actionView($id) { 
    $searchModel = new CommentSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
    $dataProvider->query->andWhere(['IsDeleted' => 0]); 
    $dataProvider->pagination->pageSize=15; 

    return $this->render('view', [ 
       'model' => $this->findOneModel($id), 
       'comment' => UrComment::findComment($id), 
       'searchModel' => $searchModel, 
       'dataProvider' => $dataProvider, 
    ]); 
} 

CommentSearch:

<?php 

namespace backend\modules\users\models; 

use Yii; 
use yii\base\Model; 
use yii\data\ActiveDataProvider; 
use common\models\UrComment; 

class CommentSearch extends UrComment 
{   
    public function rules() { 
     return [ 
      [['Id'], 'integer'], 
      [['Text'], 'safe'],   
     ]; 
    } 

    public function scenarios() { 
     // bypass scenarios() implementation in the parent class 
     return Model::scenarios(); 
    } 

    public function search($params) { 
     $query = UrComment::find(); 

     $dataProvider = new ActiveDataProvider([ 
      'query' => $query, 
     ]); 

     $this->load($params); 

     if (!$this->validate()) { 
      // uncomment the following line if you do not want to return any records when validation fails 
      // $query->where('0=1'); 
      return $dataProvider; 
     } 

     $query->andFilterWhere([ 
      'Id' => $this->Id, 
      'Text' => $this->Text,     
     ]); 

     $query->andFilterWhere(['like', 'Text', $this->Text]); 

     return $dataProvider; 
    } 
} 

查看:

<?php 

use yii\helpers\Html; 
use yii\widgets\DetailView; 
use yii\helpers\Url; 
use yii\widgets\ListView; 
/* @var $this yii\web\View */ 
/* @var $model backend\modules\users\models\UrUser */ 

$this->title = $model->Name; 
$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Użytkownicy'), 'url' => ['index']]; 
$this->params['breadcrumbs'][] = $this->title; 
?> 
<div class="ur-user-view"> 

    <h1><?= Html::encode($this->title) ?></h1> 

    <p> 
     <?= Html::a(Yii::t('app', 'Aktualizuj'), ['update', 'id' => $model->Id], ['class' => 'btn btn-primary']) ?> 
     <?= 
     Html::a(Yii::t('app', 'Usuń'), ['delete', 'id' => $model->Id], [ 
      'class' => 'btn btn-danger', 
      'data' => [ 
       'confirm' => Yii::t('app', 'Jesteś pewien, że chesz usunąć tego użytkownika?'), 
       'method' => 'post', 
      ], 
     ]) 
     ?> 
    </p> 

    <?= 
    DetailView::widget([ 
     'model' => $model, 
     'attributes' => [ 
      'Id', 
      'Name', 
      'Surname', 
      'BirthDate', 
      'Login', 
      'Email:email', 
      ['attribute' => 'Rel_Sex', 'value' => (isset($model->relSex->Name)? $model->relSex->Name : "Nie wybrano")], 
      ['attribute' => 'Rel_Language', 'value' => (isset($model->relLanguage->Name)) ? $model->relLanguage->Name : "Nie wybrano"], 
      ['attribute' => 'Rel_Country', 'value' => (isset($model->relCountry->Name)) ? $model->relCountry->Name : "Nie wybrano"], 
      ['attribute' => 'Rel_Category', 'value' => (isset($model->relUserCategory->Name)) ? $model->relUserCategory->Name : "Nie wybrano"], 
     ], 
    ]) 
    ?> 
Komentarze użytkownika: <?= $model->Name.' '.$model->Surname;?><br><br> 
<?php  
    echo ListView::widget([ 
    'dataProvider' => $dataProvider, 
    'itemView' => 'comments', 
    'viewParams' => ['comment' => $comment, 'model'=>$model], 
]); 
?> 
</div> 
</div> 
</div> 

我的項目註釋:

<?php 

use yii\helpers\Html; 
use yii\widgets\DetailView; 
use yii\helpers\Url; 
/* @var $this yii\web\View */ 
/* @var $model backend\modules\users\models\UrUser */ 


?> 
    <?= Html::a(Yii::t('app', 'Edytuj'), ['update-user-comment', 'id' => $comment->Id], ['class' => 'btn btn-primary']) ?> 
     <?= 
     Html::a(Yii::t('app', 'Usuń'), ['delete-comment', 'id' => $comment->Id], [ 
      'class' => 'btn btn-danger', 
      'data' => [ 
       'confirm' => Yii::t('app', 'Jesteś pewien, że chesz usunąć tego użytkownika?'), 
       'method' => 'post', 
      ], 
     ]) 
     ?> 
      <p><?= $comment->Text ?></p> 

    <hr> 

使用的代碼,現在我有錯誤的是,在按鈕編輯這個項目:

$comment->Id], ['class' => 'btn btn-primary']) ?>

Trying to get property of non-object

而且我不能使用的foreach那裏,因爲我有重複的意見。應該在評論中改變內容搜索或在我的功能findComment(id)查詢?

有我的實際項目'評論',我想顯示評論和按鈕編輯和刪除評論的文本。但這對我不起作用。我有:

Use of undefined constant Id - assumed 'Id'

Use of undefined constant Text - assumed 'Text';

<?php 

use yii\helpers\Html; 
use yii\widgets\DetailView; 
use yii\helpers\Url; 
/* @var $this yii\web\View */ 
/* @var $model backend\modules\users\models\UrUser */ 


?> 
    <?= Html::a(Yii::t('app', 'Edytuj'), ['update-user-comment', 'id' => Id], ['class' => 'btn btn-primary']) ?> 
     <?= 
     Html::a(Yii::t('app', 'Usuń'), ['delete-comment', 'id' => Id], [ 
      'class' => 'btn btn-danger', 
      'data' => [ 
       'confirm' => Yii::t('app', 'Jesteś pewien, że chesz usunąć tego użytkownika?'), 
       'method' => 'post', 
      ], 
     ]) 
     ?> 
      <p><?= Text ?></p> 
    <hr> 

回答

1

如果你不容易,使用分頁使用模型和foreach因爲如果分頁基礎上,數據提供程序,而不是直接對模型..

基本上找到像你這樣的模型的確意味着對數據的工作直接,而分頁不直接在數據上工作,而是使用SQL查詢從數據庫中獲取回收信息a讓這些數據可用於wid得到..這是什麼數據提供程序執行..那麼我建議你使用類似的ListView一個小部件,並更改根據您的查詢找到根據modelSearch一個數據提供程序..

public function actionView($id) { 
    $searchModel = new UrCommentSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
    $dataProvider->query->andWhere(['IsDeleted' => 0]); 
    $dataProvider->pagination->pageSize=15; 

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

和視圖.php

<?php 

echo ' <h1>User : ' . $model->userName . '</h1>'; 

echo '<h2>Comments</h2'>, 

echo ListView::widget([ 

    'dataProvider' => $dataProvider, 
    'itemView' => '_comment', 
]); 

其中_comment是您評論版面的局部視圖。

然後_comment.php你可以簡單

<?=$model->id;?> 
<?=$model->text;?> 
+0

感謝您的評論。你進入我的這個解決方案,但我仍然不知道如何將我的評論屬於用戶轉移到評論(項目視圖),我顯示此評論 – qwerty

+0

您可以同時傳遞(用於用戶數據$模型和$ dataProvider註釋),然後在適當的頂部區域中顯示模型和ListView中的評論..我已經用這種方式更新了一些建議的答案.. – scaisEdge

+0

但$ model關注用戶表。 ü寫tihs itemView但我不知道我應該在這個_comment中寫什麼來顯示這個評論。在哪裏我應該使用$ dataProvider來顯示coments或$ dataProvider中的這個查詢 – qwerty