用户资金记录表和用户表,两张表通过userId关联
需求:需要在资金记录表中添加两列,username用户名和realname真实姓名,并实现自动搜索
直接干货
第一步:找到用户资金记录表对应的AR模型类 ,common\models\BorrowAccountLog,在该文件中进行关联User表
并在属性中定义2个要查询的属性字段,定义这2个字段就可以在gridView中显示user表中的username字段数据了
public $username;//这个是user表中username字段
public $realname;//这个是user表中realname字段
public function getUser(){
return $this->hasOne(User::className(),['userId'=>'userId']);
}
在SearchModel中的rules()方法中加入下面规则:
[['username','realname'],'safe'],//一定要加,不然搜索框出不来
search()方法中加入:
设置排序规则query->joinWith(['user']); $query->select("hs_borrow_account_log.*, hs_user.username, hs_user.realname");
增加过滤条件$dataProvider->setSort([ //添加-----排序 'attributes' => [ //其他字段不动 'username' => [ 'asc' => [User::tableName().'.username' => SORT_ASC], 'desc' => [User::tableName().'.username' => SORT_DESC], 'label' => '用户名' ], 'realname' => [ 'asc' => [User::tableName().'.realname' => SORT_ASC], 'desc' => [User::tableName().'.realname' => SORT_DESC], 'label' => '真实姓名' ] ] ]);
$query->andFilterWhere(['like', 'hs_user.username', $this->username]); $query->andFilterWhere(['like', 'hs_user.realname', $this->realname]);
第二部 VIEW.php文件
//这个user就是model中getUser链表方法的user,或者直接写username ['label'=>'用户名', 'attribute' => 'username', 'value' => 'user.username' ], ['label'=>'真实姓名', 'attribute' => 'realname', 'value' => 'user.realname' ],
还有一种情况:我们需要对联表字段进行下拉框搜索,比如对状态进行搜索,我们可以这么干[ 'label'=>'用户类型', 'attribute' => 'type', 'value' => function ($model) { return $model->user->type == 1 ? '投资人' : '借款人'; }, 'filter' => [0=>'借款人',1=>'投资人' ],//重点在这里,传入一个数组,会下拉框显示
'headerOptions' => ['width' => '7%'] ],