laravel eloquent 模型关联

来源:互联网 发布:部落冲突七本满防数据 编辑:程序博客网 时间:2024/05/17 17:46

一、建立方式

建立模型关联,如关联a与b,则需要在a模型里写一个名称为b(默认命名规则)的方法,调用b方法返回结果。同时需要在b里面写一个名称为a(默认命名规则)的方法,调用a方法返回结果。此处注意:方法命名时,要根据关联关系写对函数名,一对多时函数名为复数!!!

注意:Eloquent 会基于模型名决定外键名称。

解释:Eloquent会假设b有一个名为“a_id”的外键,且假定外键值是与父级 id列的值相匹配的。

根据a查找b时,会在b模型下的表中'a_id'字段查找与a的id字段相符的数据,

根据b查找a时,会在a模型下的表中'id'字段查找与b的a_id字段相符的数据。


二、返回结果需调用如下laravel方法:


一对一:

——一个a对应一个b:数据库中有a表和b表


a模型:方法名为b

调用的返回方法:hasOne('b')

hasOne参数列表:hasOne('关联的模型','外键(可省略,b模型中默认的a_id字段)','a模型中与b关联的键名(可省略,默认a的id字段)')


b模型:方法名为a

调用的返回方法:belongsTo('a')

belongsTo参数列表:belongsTo('关联的模型','外键(可省略,b模型中默认的a_id字段)','a模型中与b关联的键名(可省略,默认a的id字段)')



一对多:

——一个a对应多个b:数据库中有a表和b表


a模型:方法名为bs(复数形式

调用的返回方法:hasMany('b')

hasMany参数列表:hasMany('关联的模型','外键(可省略,b模型中默认的a_id字段)','a模型中与b关联的键名(可省略,默认a的id字段)')


b模型:方法名为a

调用的返回方法:belongsTo('a')

belongsTo参数列表:belongsTo('关联的模型','外键(可省略,b模型中默认的a_id字段)','a模型中与b关联的键名(可省略,默认a的id字段)')



多对多:

——多个a对应多个b:数据库中有a、b表、a_b表(中间表是以相关联的两个模型数据表、依照字母顺序排列命名的,并且包含 a_id 和 b_id 字段。)


a模型:方法名为bs(复数形式

调用的返回方法:belongsToMany('b')

b模型:方法名为as(复数形式

调用的返回方法:belongsToMany('a')

belongsToMany参数列表:belongsToMany('关联的模型','自定义连接表表名(可省略,默认a_b表)','当前模型在中间表里的键名(可省略,默认a_id)','另一个模型在中间表里的键名(可省略,默认b_id)')


对于a_b表,获取中间表字段时,分为两种情况,不建立自定义模型和建立自定义模型

情况一:不建自定义立中间模型

$result = App\a::find(1);foreach ($result->bs as $b) {    echo $b->pivot->created_at;}

此时相当于(目录下并不存在)拥有一个默认模型pivot,我们取得的每个 b 模型对象,都会被自动赋予 pivot 属性,它代表中间表的一个模型对象,能像其它的 Eloquent 模型一样使用。

默认情况下,pivot对象只包含两个关联模型的键。如果表里还有其他字段,需要在定义关联时明确指出:

return $this->belongsToMany('App\b')->withPivot('column1', 'column2');
自动维护时间戳:

return $this->belongsToMany('App\b')->withTimestamps();
通过中间表过滤数据:

return $this->belongsToMany('App\b')->wherePivot('approved', 1);return $this->belongsToMany('App\b')->wherePivotIn('priority', [1, 2]);



情况二:建立自定义中间表模型

定义关联时调用 using 方法

return $this->belongsToMany('App\User')->using('App\ab');

必须扩展自 Illuminate\Database\Eloquent\Relations\Pivot 类

当定义 UserRole 模型时,我们要扩展自 Pivot 类:

<?phpnamespace App;use Illuminate\Database\Eloquent\Relations\Pivot;class ab extends Pivot{    //}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小燕子从窝里掉下来了怎么办 二岁宝宝晚上睡觉不踏实怎么办 脚扭伤了有点痛但没肿该怎么办 落地扇的机头摇摆的地方坏了怎么办 跌倒在楼梯上右侧肋骨骆上怎么办 1岁3个月害怕自己不敢走路怎么办 苹果手机没开定位丢了怎么办 我和我老婆每天都吵架怎么办 现在在学注册消防师好枯燥怎么办 店铺台阶太高顾客不愿进来怎么办? 上古卷轴5跑步要沉下去怎么办 1岁半宝宝半夜醒来不睡觉怎么办 上古卷轴5不小心偷了东西怎么办 47牙缺失17号长长了怎么办 碎纸机过热件亮了卡住纸了怎么办 汽车买贵了2万多怎么办 宝宝眼皮被蚊子咬肿了怎么办 一岁宝宝撞头咬到舌头有伤口怎么办 二胎快生了老大特别粘人怎么办 生二胎不舍得大宝跟奶奶睡怎么办 怀二胎婆婆不帮忙带孩子怎么办 注册过的高铁用户名忘了怎么办 硕士延期毕业找好的工作怎么办 竞彩足球绑定信用卡提不了现怎么办 qq启动出现问题请卸载重装怎么办 u盘有文件打开后却是空的怎么办 王者荣耀不记得所在的区服怎么办 交易猫出售游戏账号是微信号怎么办 网银密码输错3次怎么办 无线网卡信号很好就是没网速怎么办 红米2a忘了登陆账号怎么办 qq封了密保手机没用了怎么办 乐视手机重置账号密码忘了怎么办 此版本的ios不支持银联怎么办 单反m档拍出来照片是黑色怎么办 从兴趣部落老发骚扰信息怎么办 在厂里辞一个月厂长不批怎么办 在厂里做管理被员工恐吓怎么办 在葡京娱乐输了很多钱怎么办 从珠海入镜澳门北京往返签注怎么办 艾艾灸灸了一身小子子怎么办?