显示数据的Yii2 Gridview表格
我的问题是下一个。我使用Yii2 gridview表和会话中记录的用户id。如果我与ID为2的用户一起登录,我希望仅为ID为2的用户显示表中的数据。提前谢谢你的回答显示数据的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'],
<?= 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
。