牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2016-11-02 投稿人: 浏览次数:2112

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





声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。