Laravel中常用的Eloquent 模型关联hasOne,hasMany,belongsTo,belongsToMany区别用法

1. hasOne()

当前city表为主表,需要向下找关联表的字段用hasOne (主表A有一个B)

/**
 * 城市表模型
 *
 * @author 汤小米
 * @Datetime 2020-8-14
 * @package App\Models\Account
 */
class City extends Model
{
    protected $table = 'city';

    /**
     * 获取省份详细信息
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function province() {
        return $this->hasOne(Province::class,'city_id','id');
    }
}

2. hasMany()

一对多关系hasMany(主表A有很多B)

/**
 * 省份表模型
 *
 * @author 汤小米
 * @Datetime 2020-8-14
 * @package App\Models\Account
 */
class Province extends Model
{
    protected $table = 'province';

    /**
     * 获取省份详细信息
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function city() {
        return $this->hasMany(City::class,'province_id','id');
    }
}

3. belongsTo()

当前表为关联表,需要向上找关联表的字段用belongsTO(主表A属于B)

 /**
 * 管理员表模型
 *
 * @author 汤小米
 * @Datetime 2020-8-14
 * @package App\Models\Account
 */
class AdminUser extends Model
{
    protected $table = 'admin_users';

    /**
     * 关联账户表
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function account() {
        return $this->belongsTo(AccountUser::class,'uid','id');
    }
}

4. belongsToMany()

belongsToMany多对多关系,多对多关系需要第三个数据库表,称为数据透视表

(privilege权限表,role角色表,role_privilege 角色权限表,一个角色拥有多个权限,一个权限可以被多个角色拥有)

/**
 * 角色表模型
 *
 * @author 汤小米
 * @Datetime 2020-8-14
 * @package App\Models\Account
 */
class Role extends Model
{
    protected $table = 'role';
    
    /**
     * 关联权限
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function privilege() {
        return $this->belongsToMany(Privilege::class,'role_privilege','role_id','privilege_id');
    }
}

author: 汤小米
Datetime: 2020-8-14


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值