[联表] -- YII2 GridView联表:文本框搜索、下拉框选择搜索和排序

用户资金记录表和用户表,两张表通过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%']
],


 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值