Yii2.0给GridView增加关联字段排序和搜索功能

yii2.0在使用了with关联了留言表(Comment)和会员表(Member),并且在留言列表中显示会员昵称。

在Comment留言表模型添加如下方法

public function getMember() {
   return $this->hasOne(Member::className(), ['id' => 'member_id']);
}

在CommentSearch模型添加一个属性

public $nickname;

并且在该模型中rules方法设置nickname为safe

public function rules()
{
    return [
        [['nickname', 'safe'],
    ];
}

修改Commentearch模型的search方法

$query = Comment::find();
if (is_array($this->relations)) {
    $query->joinWith(['member']);//关联会员表
}

然后添加排序,在

$dataProvider = new ActiveDataProvider([
    'query' => $query,
]);

后面添加如下代码

$sort = $dataProvider->getSort(); // 获取yii自动生成的排序规则
$sort->attributes['nickname'] = [ // 添加用户名的排序规则
    'asc' => ['member.nickname' => SORT_ASC],
    'desc' => ['member.nickname' => SORT_DESC],
    'label' => '昵称'
];
$dataProvider->setSort($sort); // 设置排序规则

接下来在return上面添加搜索功能

$query->andFilterWhere(['like', 'member.nickname', $this->nickname]);
return $dataProvider;

修改视图模板 Comment/index 内的 GridView::widget()参数,给 columns 数组添加以下成员:

[
    'attribute' => 'nickname',
    'label' => '昵称',
    'value' => 'member.nickname',
    'headerOptions' => ['width' => '100'],
    //'filter'=>Html::activeTextInput($searchModel, 'nickname', ['class'=>'form-control']), // 生成一个搜索框
],

全部都保存,然后刷新浏览器看看。

此条目发表在服务器分类目录,贴了标签。将固定链接加入收藏夹。

发表评论