ORM 关联关系
2018-10-29 本文已影响29人
爱折腾的傻小子
关于文档的注解:仅供学习所用!!!
--
ORM的映射关联关系,需要字段之间建立外键(如果指明可以省略建立外键)
映射关系
一对一:比如 **球队** 和 **球队地址** 之间的对应关系
一对多:比如 **球队** 和 **球队队员** 之间的对应关系
准备:
外键,简介:
> 一:有表members字段id、name、age
> 二:有表configs字段key、value、comment、u_age
建立外键 members.age -> configs.u_age (正向映射)(反之,反向映射)
一对一
//> hasOne方法基本用法:(正向查询)
参数一:需要管理的模型名(也就是关联外键的表的映射)
参数二:外键字段名称
参数三:本地字段与外键关联的字段名称
return $this->hasOne('App\Phone','foreign_key','local_key');
虽然参数二或三都可以省略,但是最好写上。
如果省略:参数二(默认的是id字段),参数三(默认的是user_id)这里参考文档。
相对关联:(反向查询)
//> belongsTo()方法:参数二和参数三都可以省略
belongsTo('App\User', 'foreign_key', 'other_key');
参数二:外键字段名称
参数三:本地字段与外键关联的字段名称
参数和hasOne一样
一对多
比如:一篇博客文章拥有的无数评论之间的关系,一样。
hasMany() 方法,定义一对多,和hasOne方法使用一致
三个参数的使用也是一样
一对多(反向):
//> 还是使用belongsTo方法,和上面的使用一致
多对多
简介:比如,一个用户拥有多个角色,同时一个角色又拥有多个用户。
// 我们看一下数据表之间的字段
users Table ( 用户表 )
id
name
> - - - - - - -
roles Table (角色表)
id
name
> - - - - - - -
role_user (关联表)
user_id
role_id
这里的字段字段之间,没有设置外键关联
获取中间表的字段(这里获取的时lv_role_users表,默认添加字段comment)
定义相对的关联关系:
注意:上面的users被调用时,不是当作属性使用,而是当作方法。