千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 什么是 Laravel Eloquent Eager Loading?

什么是 Laravel Eloquent Eager Loading?

来源:千锋教育
发布人:xqq
时间: 2023-10-13 06:27:54 1697149674

一、什么是 Laravel Eloquent Eager Loading

Laravel Eloquent Eager Loading 是一种优化数据库查询的方法,可以避免在一个循环中多次查询数据库而导致的性能问题。

当需要获取一个模型及其关联模型的数据时,如果使用常规的查询方法,每个关联模型都会独立执行一条数据库查询,从而导致数据库查询次数的增加和潜在的性能问题。而使用 Eager Loading,则可以预先加载关联数据,减少数据库查询次数,提高性能。

它的核心是Eager Loading,它告诉Eloquent你想要抓取一个具有特定关系的模型,这样框架就会产生一个更高效的查询来抓取你需要的所有数据。通过快速加载,您可以将许多查询减少到一个或两个。

二、Eloquent 模型约定

现在,我们来看一个 Flight 模型的示例,我们将用它从 flights 数据库表中检索和存储数据信息:

1、数据表名称

请注意,我们并没有告诉 Eloquent 我们的 Flight 模型使用哪个数据表。 除非明确地指定了其它名称,否则将使用类的复数形式「蛇形命名」来作为表名。因此,在这种情况下,Eloquent 将假设 Flight 模型存储的是 flights 数据表中的数据,而 AirTrafficController 模型会将记录存储在 air_traffic_controllers 表中。

你可以通过在模型上定义 table 属性来指定自定义数据表:

2、主键

Eloquent 也会假设每个数据表都有一个名为 id 的主键列。你可以定义一个受保护的 $primaryKey 属性来重写约定。

此外,Eloquent 假设主键是一个自增的整数值,这意味着默认情况下主键会自动转换为 int 类型。如果您希望使用非递增或非数字的主键则需要设置公共的 $incrementing 属性设置为 false:

如果你的主键不是一个整数,你需要将模型上受保护的 $keyType 属性设置为 string:

3、时间戳

默认情况下,Eloquent 预期你的数据表中存在 created_at 和 updated_at 两个字段 。如果你不想让 Eloquent 自动管理这两个列, 请将模型中的 $timestamps 属性设置为 false:

如果需要自定义时间戳的格式,在你的模型中设置 $dateFormat 属性。这个属性决定日期属性在数据库的存储方式,以及模型序列化为数组或者 JSON 的格式:

如果你需要自定义存储时间戳的字段名,可以在模型中设置 CREATED_AT 和 UPDATED_AT 常量的值来实现:

4、数据库连接

默认情况下,Eloquent 模型将使用你的应用程序配置的默认数据库连接。如果你想为模型指定一个不同的连接,设置 $connection 属性即可:

延伸阅读1:Laravel 的 Eloquent ORM 是什么

Laravel 的 Eloquent ORM 提供了一个漂亮、简洁的 ActiveRecord 实现来和数据库交互。每个数据库表都有一个对应的「模型」用来与该表交互。你可以通过模型查询数据表中的数据,以及在数据表中插入新记录。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT
快速通道