显示数据的Yii2 Gridview表格

显示数据的Yii2 Gridview表格,gridview,yii2,widget,Gridview,Yii2,Widget,我的问题是下一个。我使用Yii2 gridview表和会话中记录的用户id。如果我与ID为2的用户一起登录,我希望仅为ID为2的用户显示表中的数据。提前谢谢你的回答 <?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'],

我的问题是下一个。我使用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'],
]); ?>
我在哪里可以做到

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

而不是:

$query->andFilterWhere ( [
        'user_partner_id' => $this->user_partner_id,
      ] );
我写道:

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

无论如何,非常感谢

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

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

您不应该在
search()
函数内的查询中硬编码
用户\u合作伙伴\u id

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

更改您的
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']);
}
并确保在
CompanySearch
模型的
search()
函数中为
user\u partner\u id
添加了
和filterwhere
条件,或者在
search()
方法中返回
$dataProvider
之前添加一个条件

  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;
}
编辑

确保将
partner
模型中的
user\u partner\u id
字段添加到
PartnerSearch
模型中的
safe
规则中,否则它不会加载值。

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

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

您不应该在
search()
函数内的查询中硬编码
用户\u合作伙伴\u id

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

更改您的
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']);
}
并确保在
CompanySearch
模型的
search()
函数中为
user\u partner\u id
添加了
和filterwhere
条件,或者在
search()
方法中返回
$dataProvider
之前添加一个条件

  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;
}
编辑

确保将
合作伙伴
模型中的
用户合作伙伴id
字段添加到
合作伙伴搜索
模型中的
安全
规则中,否则它不会加载值。

您可以在创建
$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,
    ]);
}


请注意,在这种情况下使用
和filterwhere()
可能会很危险-如果
$\u会话['sess\u id\u user']
为空,将跳过该条件。因此,如果用户是来宾,如果您不禁止来宾访问此操作,它可能会看到所有记录。

您可以在创建
$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,
    ]);
}


请注意,在这种情况下使用
和filterwhere()
可能会很危险-如果
$\u会话['sess\u id\u user']
为空,将跳过该条件。因此,如果用户是来宾,如果您不禁止来宾访问此操作,它可能会看到所有记录。

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

$query->andFilterWhere ([ 'user_partner_id' => Yii::$app->user->identity->sess_id_user, ]);
如果您使用的是
UserModel
,只需在
SearchModel
中替换查询即可:

$query->andFilterWhere ([ 'user_partner_id' => Yii::$app->user->identity->sess_id_user, ]);
添加用于此gridview的控制器的操作,以及针对
公司的
搜索模型
,或任何一种模型,按类Partners搜索和方法搜索,我写道:$query=Partners::find()->where('user\u partner\u id',$SESSION['sess\u id\u user');但它不起作用。是的,但您需要在此处添加操作代码,以便提供准确的解决方案,只需从
PartnerSearch
模型中添加
controller/action
的代码和
search()
函数,添加几行比在假设上写更简单、快捷。请更新您的问题并添加控制器操作的代码。添加与此gridview一起使用的控制器的操作,以及您的
搜索模型
,用于
公司
,或按类别合作伙伴搜索和方法搜索的任何模型,我写道:$query=Partners::find()->where('user\u partner\u id',$\u SESSION['sess\u id\u user');但它不起作用。是的,但您需要在此处添加操作代码,以便提供准确的解决方案,只需从
PartnerSearch
模型中添加
controller/action
的代码和
search()
函数,添加几行比根据假设编写更简单、快捷。请更新您的问题并添加控制器操作的代码。hmm,它还将阻止gridview筛选器输入中的文本填充,如我的答案中所示,
+1
。hmm,它还将阻止gridview筛选器输入中的文本填充,如我的答案中所示,
+1