全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

什么是 Laravel Eloquent Eager Loading?

发布时间:2023-10-13 06:27:54
发布人:xqq

一、什么是 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 实现来和数据库交互。每个数据库表都有一个对应的「模型」用来与该表交互。你可以通过模型查询数据表中的数据,以及在数据表中插入新记录。

#it技术干货

相关文章

mysql使用into outfile导出数据,提示权限不足,怎么解决呢?

mysql使用into outfile导出数据,提示权限不足,怎么解决呢?

2023-10-13
NoteExpress在使用自动更新功能时,显示数据库网页格式发生变化,请更新该配置文件是怎么回事?

NoteExpress在使用自动更新功能时,显示数据库网页格式发生变化,请更新该配置文件是怎么回事?

2023-10-13
Mysql怎么把图片转换的base64以字符串的类型存入数据库?

Mysql怎么把图片转换的base64以字符串的类型存入数据库?

2023-10-13
为什么mysql having的条件表达式可以直接使用select后的别名?

为什么mysql having的条件表达式可以直接使用select后的别名?

2023-10-13

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09