thinkphp6数据库相关操作

一、多表联合查询

复制代码
$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;

}

 

posted @   djiz  阅读(155)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示