zoukankan      html  css  js  c++  java
  • hasOne、hasMany、belongsTo

    这里将hasOne、hasMany、belongsTo进行一个详细举例说明。
    
    首先,这3个的大致中文意思:
    
    hasOne:有一个,加上主谓语应该是 ,A 有一个 B
    hasMany:有很多,A 有很多 B
    belongsTo:属于, A 属于 B
    
    这里我们准备3张表来理解他们的关系:
    user_group 用户分组表:id、title
    user 用户表:id、user_group_id、username、password
    profile 用户信息表:id、user_id、nickname、sex
    
    1、user表需要关联user_group表,表示每一个 用户 需要知道该用户是 哪个用户分组的;
    2、profile表 需要关联 用户表,表示该用户信息数据 是哪个用户的信息;
    
    我们知道一个用户组下面可以有很多用户,所以:user_group hasMany user;
    一个用户 属于 一个用户组,所以:user belongsTo user_group;
    
    同样是user_group和user表,但我们出发点不同,关系也就不一样了。
    
    每个用户都应该有唯一一条用户信息数据,所以:user hasOne profile;
    一条用户信息 属于 一个用户,所以:profile belongsTo user
    
    综上:
    
    在User模型中,我们可以定义关联:
    function user_group(){
        return $this->belongsTo('UserGroup');
    }
    function profile(){
       return $this->hasOne('Profile');
    }
    
    我们在查询中:
    $user = model('User')->find();
    $user = $user->user_group; //这样user中就可以包含当前数据对应的user_grou数据了
    $user = $user->profile;//这样user中就可以包含当前数据对应的profile数据了
    
    在UserGroup模型中,我们可以定义关联:
    function user(){
       return $this->hasMany('User');
    }
    
    在Profile模型中,我们可以定义关联:
    function user(){
        return $this->belongsTo('User');
    } 
    
    注:定义关联function的方法名可以随意定义,一般为表名或模型名;
    我们定义的时候是function,但获取时理解为获取属性,所以不加(); 很多人理解是我定义了一个profile的方法,所以应该
    $user->profile(),这里要特别注意下。 这样我们在查询时,就方便了,不需要使用大量的join。
  • 相关阅读:
    截取UIImagePickerController的拍照事件
    Xcode报错:run custom shell script '[cp] copy pods resource
    XCode报错:Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1
    Mac环境下实现alias的重命名命令(永久生效)
    Swift 3.0在集合类数据结构上的一些新变化
    iOS几种简单有效的数组排序方法
    二分法查找、快速排序思想与实现
    iOS10 相册权限
    ios应用版本号设置规则
    iOS白名单设置
  • 原文地址:https://www.cnblogs.com/sgm4231/p/10609231.html
Copyright © 2011-2022 走看看