YII2 GridView联表:文本框搜索、下拉框选择搜索和排序
用户资金记录表和用户表,两张表通过userId关联
需求:需要在资金记录表中添加两列,username用户名和realname真实姓名,并实现自动搜索
直接干货
第一步:找到用户资金记录表对应的AR模型类 ,commonmodelsBorrowAccountLog,在该文件中进行关联User表
public function getUser(){
return $this->hasOne(User::className(),["userId"=>"userId"]);
}
自己百度下hasOne
第二步:在BorrowAccountLogSearch中加入
public $username; public $realname;
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文件
["label"=>"用户名", "attribute" => "username", "value" => "user.username" ], ["label"=>"真实姓名", "attribute" => "realname", "value" => "user.realname" ],
如果你忽然不想要搜索框了,你可以这样写:
"user.username"
"user.realname"
还有一种情况:我们需要对联表字段进行下拉框搜索,比如对状态进行搜索,我们可以这么干
["label"=>"用户类型", "attribute" => "type", "value" => function ($model) {
return $model->user->type == 1 ? "投资人" : "借款人";
},
"filter" => [0=>"借款人",1=>"投资人"],//重点在这里,传入一个数组,会下拉框显示"headerOptions" => ["width" => "7%"] ],
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: open_basedir restriction in effect的错误及其解决办法
