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%"] ],
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。