Yii2 Gridview表显示数据

时间:2018-06-09 14:05:35

标签: gridview yii2 widget

我的问题是下一个。我使用Yii2 gridview表和我在会话中记录的用户ID。如果我使用具有ID 2的用户登录,我想仅为ID为2的用户显示表中的数据。感谢您提前获得答案。

<?= GridView::widget([
  'dataProvider' => $dataProvider,
  'filterModel' => $searchModel,
  'columns' => [
    ['class' => 'yii\grid\SerialColumn'],

    'company_name',
    'person_name',
    'company_address',
    'company_email:email',
    'meeting_date',
    'user_id',//external key
    'tel_fix',
    'tel_mob',

    ['class' => 'yii\grid\ActionColumn', 'template' => '{view} {update}'],
  ],
  'tableOptions' => ['class' => 'table table-striped table-bordered'],
]); ?>

这是来自PartnersController的actionIndex。

public function actionIndex()
    {
        $searchModel = new PartnersSearch();

        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

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

我在哪里可以做到?

非常感谢! 但是在你的代码中,我只进行了一次更改,现在效果很好!

而不是:

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

我写道:

$query->andFilterWhere ( [
        'user_partner_id' => $_SESSION['sess_id_user'],
      ] );

无论如何,非常感谢你!

3 个答案:

答案 0 :(得分:1)

如果您只想列出登录用户的记录,则需要执行以下操作

在您从模型中调用controller/action函数之前,在search()添加以下内容时,我假设操作的名称为actionIndex(),视图名称为{{1}你可以把它们改成你的亲戚名字。

您不应该在index函数

中的查询中对user_partner_id进行硬编码
search()

但相反,您应该通过params将其传递给 //THIS IS WRONG $query = Partners::find()->where('user_partner_id',$_SESSION['sess_id_user']); 方法,因为您的PartnersSearch也将被管理员使用,这需要所有记录都可以访问。

改变你search()

controller/action

并确保在public function actionIndex(){ $searchModel = new \common\models\PartnersSearch(); $params = Yii::$app->request->queryParams; $params['PartnersSearch']['user_partner_id'] = Yii::$app->user->id; $dataProvider = $model->search ( $params ); $this->render('index',['searchModel']); } 模型的andFilterWhere函数中为user_partner_id添加了search()条件,或在返回CompanySearch之前添加一个$dataProvider条件在search()方法中。

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

        // add conditions that should always apply here

        $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;
        }
        //your rest of code
        .................

        /*THIS LINE NEEDS TO BE ADDED*/
        $query->andFilterWhere ( [
            'user_partner_id' => $this->user_partner_id,
        ] );
         /*THIS LINE NEEDS TO BE ADDED*/

         return $dataProvider;
}

EDIT

确保user_partner_id模型中的Partner字段已添加到safe模型中的PartnerSearch规则中,否则不会加载该值。

答案 1 :(得分:1)

创建$dataProvider后,您可以直接在控制器操作中添加条件:

public function actionIndex() {
    $searchModel = new PartnersSearch();

    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    $dataprovider->query->andWhere(['user_partner_id' => $_SESSION['sess_id_user']]);

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

请注意,在这种情况下使用andFilterWhere()可能会有危险 - 如果$_SESSION['sess_id_user']为空,则会跳过条件。因此,如果用户是访客,如果您不允许访客访问此操作,则可能会看到所有记录。

答案 2 :(得分:1)

如果您使用UserModel,只需在SearchModel中替换您的查询:


     $query->andFilterWhere ([
                'user_partner_id' => Yii::$app->user->identity->sess_id_user,
            ]);

或者sess_id_userUserModel中的主键:


     $query->andFilterWhere ([
                'user_partner_id' => Yii::$app->user->id,
            ]);