我的问题是下一个。我使用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'],
] );
无论如何,非常感谢你!
答案 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_user
是UserModel
中的主键:
$query->andFilterWhere ([ 'user_partner_id' => Yii::$app->user->id, ]);