thinkphp6数据库相关操作

发布时间 2023-05-30 19:09:27作者: djiz

一、多表联合查询

$list = UserModel::where(function (Query $query) {
            $data = $this->request->param();
            $query->where('user_type',2);
            。。。。
        })->haswhere('UserParams',function(Query $query){
$query->where('elite', 1); 。。。。 })->order("create_time DESC") ->paginate(15);

生成sql SELECT `UserModel`.* FROM `xxxx_user` `UserModel` INNER JOIN `xxxx_user_params` `UserParamsModel` ON `UserModel`.`id`=`UserParamsModel`.`userid` WHERE `UserParamsModel`.`elite` = '1'  ORDER BY `create_time` DESC LIMIT 0,15

没有查询条件user_type=2  只有 elite 条件

要先haswere,再where  ,where里的条件才有效

$list = UserModel::haswhere('UserParams',function(Query $query){
             
                $query->where('elite', 1);
             
        })->where(function (Query $query) {
            $data = $this->request->param();
            $query->where('user_type',2);
            if (!empty($data['uid'])) {
                $query->where('id', intval($data['uid']));
            }

            if (!empty($data['keyword'])) {
                $keyword = $data['keyword'];
                $query->where('user_login|user_nickname|user_email|mobile', 'like', "%$keyword%");
            } 
        })->order("create_time DESC")
            ->paginate(15);

 

user表不想返回所有字段怎么办?尤其是ajax请求直接返回查询数据时,不能把密码一起返回

可以这样 

hasWhere('userParams', function($query) use($where) {
$query->where($where);
},'id,UserModel.avatar,user_nickname,sex')

 

hasWhere 是有第三个参数的,第三个参数可以指定返回字段

如果想返回UserParams 关联模型的字段怎么办??? 查询结果集里循环追加
foreach($users as $user) {
    $user->userProfile;
    $user->userParams;

}