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; }