需求:使用with一条sql查询出用户和用户微信信息的同时,关联查询出上N级同样信息
表结构简化如下:
在用户表`user`中有`id(用户ID),mobile(手机号),upid(上级用户ID)`三个字段,
用户微信信息表`user_wechat`有`user_id(关联用户ID),openid(微信OPNEID),nickname(昵称),headimg(头像)`
用户表模型:User.php
namespace app\common\model;
class User extends BaseModel
{
/*
* 微信信息关联
*/
public function userWeixin()
{
return $this->hasOne(UserWeixin::class,'user_id')->bind([
'nickname'=>'nickName',
'openid'=>'wxOpenid',
'headimg'=>'headImg',
]);
}
//多级关联上级取指定字段
public function up()
{
return $this->belongsTo(User::class,'upid')->field('id,mobile,upid');
}
}
有问题写法(中间一级丢失微信关联):
$user = User::field('id,mobile,upid')
->with(['userWeixin','up','up.userWeixin','up.up','up.up.userWeixin'])
->where('id','=',function($query) use($uid){
$query->name('user')->where("id = {$uid}")->field('upid');
})->find()->toArray() ;

有问题with写法
改进写法:
$user = User::field('id,mobile,upper')
->with(['userWeixin','up'=>['userWeixin','up'=>['userWeixin']]])
->where('id','=',function($query) use($uid){//因为传的ID是当前用户,需要的是上级用户ID
$query->name('user')->where("id = {$uid}")->field('upid');//简写
# $query->table(config('database.connections.mysql.prefix').'user')->where("id = {$uid}")->field('upid');
})->find()->toArray() ;
dd($user);
仔细看了手册,摒弃
with(['userWeixin','up','up.userWeixin','up.up','up.up.userWeixin'])
with(['userWeixin','up.userWeixin','up.up.userWeixin']) 写法
改成下面写法:
with(['userWeixin','up'=>['userWeixin','up'=>['userWeixin']]])
with(['userWeixin','up'=>['userWeixin','up.userWeixin']])

关联上三级查询
网友评论