美文网首页
laravel 模型关联

laravel 模型关联

作者: 小李不是你 | 来源:发表于2019-01-09 14:08 被阅读0次

laravel 模型关联

1、 一对一
    所需表:users(用户表)、phone(电话表)
    /**
    * 获得与用户关联的电话记录。
    */
    public function phone()
    {
        return $this->hasOne(PhoneModel::class,'foreign_key','local_key');
    }
    ps:一对一, 'A'表与'B'表的关联
2、 定义反向关联(可用户一对多的反向关联)
    /**
    * 获得拥有此电话的用户。
    */
    public function user()
    {
        return $this->belongsTo(UserModel::class,'foreign_key','owner_key');
    }    
    
    ps: owner_key:关联模型的键   foreign_key:当前模型的键
    个人理解:'一个用户有多个手机号码,但一个号码只属于一个用户,在电话模型关联用户时就可以用反向关联,也可以用一对一关联'
3、 一对多
    /**
    * 获得此博客文章的评论。
    */
    public function comments()
    {
        return $this->hasMany(CommentModel::class,'foreign_key','local_key');
    }
4、 多对多
    多对多需要用到三个表: roles、users、role_user
    /**
    * 获得此用户的角色。
    */
    public function roles()
    {
        return $this->belongsToMany(RoleModel::class,UserRoleModel::class,'user_id','role_id');
    }
    
    ps:在UserModel模型中添加此方法
    
    个人理解:'多对多其实就是三个表之间的关联,一般用于用户表、角色表、用户角色表之间的关联'
    
5、 远程一对多
    远程一对多所需的表:users(用户表)、countries(国家表)、post(博客表)
    
    在countries模型中,新建博客关联方法 post()
    
    /**
     * 获得某个国家下所有的用户文章。
     */
    public function posts()
    {
        return $this->hasManyThrough(PostModel::class, UsersModel::class,'country_id','user_id','id','id');
    }
    
    ps:'country_id':用户表的外键(国家ID) 'user_id':文章表的外键(用户ID) 'id':国家表(当前模型)本地键(ID) 'id':用户表本地键(ID)
    
    个人理解:'A'与'B'有关联、'A'与'C'有关联,'B'与'C'没关联,远程一对多其实就是通过'A'来实现'B'和'C'的查询,

6、 官方文档
https://laravel-china.org/docs/laravel/5.5/eloquent-relationships/1333
7、 whereHas使用
    /**
     * 关联上级
     */
    !empty($data['parent_account']) && $model = $model->whereHas('parentUsers',function ($query) use ($data){
        //上级姓名筛选
        $query->select()->where('account','like','%'.$data['parent_account'].'%');
    });
    
    ps:主要用于在使用模型关联时,关联表的字段作为条件去筛选
    

相关文章

网友评论

      本文标题:laravel 模型关联

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