美文网首页
tp6使用with方法改进笔记!

tp6使用with方法改进笔记!

作者: DragonersLi | 来源:发表于2021-02-05 18:28 被阅读0次
需求:使用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']]) 
关联上三级查询

相关文章

网友评论

      本文标题:tp6使用with方法改进笔记!

      本文链接:https://www.haomeiwen.com/subject/zsqarxtx.html