belongsTo
A.前提:有两个实体表 user 和 type user 表中有外键 type_id 关联 type 表
在 user 模型内创建与 type 的关联关系时,用belongsTo;
hasMany
在type 模型内创建与 user 关联关系时,如果是一对多 :hasMany;
hasOne
在type 模型内创建与 user 关联关系时,如果是一对一 :hasOne;
belongsToMany
有两个实体表 user 和 permission 和一个非实体表 user_has_permissions (字段:user_id & permission_id),
a.在user模型内创建与permission的关联关系时候 belongsToMany(Permission::class,"user_has_permissions",'user_id','permission_id');
b.在permission模型常见与user的关联关系时候 belongsToMany(User::class,"user_has_permissions",'permission_id','user_id');
未完待续
远程一对一
前提:
user 与 phone 关系是一对一,
我们采用上面的 hasOne可以实现
phone 与 brand 关系是一对一
我们也可以采用上面的 hasOne可以实现
但是当我们 相关联 user与brand 一对一的关系 原来实现的方法是 user 通过 phone 模型 再找到 brand ,这样 sql 打印是查询了两条语句,性能上并不友好;
我们可以采用 hasOneThrough 远程一对一 实现 这样仅仅查询sql 语句
user 模型下
return $this->hasOneThrough('App\Models\Brand', 'App\Models\Phone');
return $this->hasOneThrough(
'App\Models\Brand',
'App\Models\Phone',
'', // phone外键...
'', // brand外键...
'', // user 主键...
'' // Phone 主键...
);
这篇文章 解释的很清晰,
https://www.jianshu.com/p/d7e5ee17e5ed