我的问题是下一个。我使用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'],
] );
无论如何,非常感谢!
发布于 2018-06-09 22:38:14
如果只想列出已登录用户的记录,则需要执行以下操作
在从模型调用search()
函数之前,在您的controller/action
中添加以下内容,我假设操作的名称是actionIndex()
,视图的名称是index
,您可以将它们更改为相对名称。
不应在search()
函数内的查询中对user_partner_id
进行硬编码
//THIS IS WRONG
$query = Partners::find()->where('user_partner_id',$_SESSION['sess_id_user']);
但是,您应该通过参数将其传递给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_partner_id
添加了andFilterWhere
条件,或者在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;
}
EDIT
确保来自Partner
模型的字段user_partner_id
被添加到PartnerSearch
模型内的safe
规则中,否则它不会加载值。
https://stackoverflow.com/questions/50775101
复制相似问题