Eloquent模型关联速记表

未匹配的标注

学习链接

xueyuanjun.com/post/9725
xueyuanjun.com/post/9726

Eloquent 模型支持的关联关系包括以下七种:

  • 一对一

建立关联关系:hasOne
建立相对的关联关系:belongsTo

  • 一对多
    hasMany
    belongsTo

  • 多对多

  • 远层一对多

  • 多态关联(一对一)

  • 多态关联(一对多)

  • 多态关联(多对多)

| 关联方式 | 建立关联关系 | 建立相对的关联关系|表情况|
| ———— | ———— |———— |———— |
| 一对一 | hasOne |belongsTo | 一对一 两张表 一条数据对应一条数据 |
| 一对多 | hasMany| belongsTo |两个模型 一条数据对应多个信息|
| 多对多 | belongsToMany| belongsToMany |两个模型但是会创建三个表,一个标只存关系|
| 远层一对多 | hasManyThrough| belongsToMany |
| 多态关联(一对一) | belongsToMany| belongsToMany |
| 多态关联(一对多) | belongsToMany| belongsToMany |
| 多态关联(多对多) | belongsToMany| belongsToMany |

场景

RBAC。
自行理解就行。

关联查询

懒惰式加载(动态属性)

下面这种方式就是懒惰式加载:

$post = Post::findOrFail(1);

$author = $post->author;

优点,无脑。
缺点性能差。因为每次开始查询都去链接数据库查关联表。

渴求式加载(通过with方法)

优点: 性能更优,因为它会提前从数据库一次性查询所有关联数据

缺点: 可能因为不太无脑?

统计关联模型

withCount 方法在不加载关联模型的情况下统计关联结果的数量

多对多关联的绑定与解除(没有关联关系如何绑定?又如何解除)

将两个本来没有关联关系的记录绑定起来 attach

解除这个关联关系可以通过 detach 方法实现

更新子模型如何触发父模型时间戳更新?

以时间为列:
子模型中配置 $touches 属性:

// 要触发更新的父级关联关系
protected $touches = [
    'commentable'
];

结语

好了,关于关联关系我们就介绍到这里,我们分了三篇的篇幅来介绍 Eloquent 模型的管理关系,回顾一下,主要包含以下内容:

  • 七种关联关系的定义:一对一、一对多、多对多、远层一对多、一对一的多态关联、一对多的多态关联、多对多的多态关联;
  • 以上关联关系的查询,主要包含两种方式:懒惰式加载和渴求式加载;
  • 基于关联查询构架复杂查询对查询结果进行过滤;
  • 关联模型的更新、插入和删除操作。

感谢

再次感谢学院君老师,让我能快速的学习laravel 这些很好用的用法,平时看手册,比较晦涩。也容易下意识的遗漏这些知识点。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
发起讨论 只看当前版本


暂无话题~