首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >显示数据的Yii2网格视图表格

显示数据的Yii2网格视图表格
EN

Stack Overflow用户
提问于 2018-06-09 22:05:35
回答 1查看 453关注 0票数 0

我的问题是下一个。我使用Yii2 gridview表和我在会话中记录的用户id。如果我以ID为2的用户登录,我希望只为ID为2的用户显示表中的数据。

代码语言:javascript
复制
<?= 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。

代码语言:javascript
复制
public function actionIndex()
    {
        $searchModel = new PartnersSearch();

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

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

我可以在哪里做到这一点?

非常感谢!但在您的代码中,我只做了一处更改,现在它工作得很好!

而不是:

代码语言:javascript
复制
$query->andFilterWhere ( [
        'user_partner_id' => $this->user_partner_id,
      ] );

我写道:

代码语言:javascript
复制
$query->andFilterWhere ( [
        'user_partner_id' => $_SESSION['sess_id_user'],
      ] );

无论如何,非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-06-09 22:38:14

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

在从模型调用search()函数之前,在您的controller/action中添加以下内容,我假设操作的名称是actionIndex(),视图的名称是index,您可以将它们更改为相对名称。

不应在search()函数内的查询中对user_partner_id进行硬编码

代码语言:javascript
复制
 //THIS IS WRONG
 $query = Partners::find()->where('user_partner_id',$_SESSION['sess_id_user']);

但是,您应该通过参数将其传递给search()方法,因为您的PartnersSearch也将被管理员使用,管理员需要拥有可访问的所有记录。

改变你的controller/action

代码语言:javascript
复制
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']);
}

并确保在CompanySearch模型的search()函数中为user_partner_id添加了andFilterWhere条件,或者在search()方法中返回$dataProvider之前添加一个条件。

代码语言:javascript
复制
  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

确保来自Partner模型的字段user_partner_id被添加到PartnerSearch模型内的safe规则中,否则它不会加载值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50775101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档