Laravel渴望加载vs显式连接

问题描述 投票:17回答:1

这听起来像是一个显而易见的问题,但我只想得到保证。

使用Laravel急切的加载功能,据我了解,它将创建两个查询以返回相关结果的完整列表(例如,如果您正在使用两个表)。但是,如果我错了,请纠正我,使用join语句将只留下一个查询,这将减少到服务器数据库(MySQL)的往返行程,并且查询效率更高。

我知道您可以在Laravel中编写联接查询,这很好,所以问题是:我不正确地认为,当从两个或多个表中检索相关数据时,我是否应该不急于加载而应该写我的书?自己的连接语句?

******编辑*******

回到一年后,我个人认为,只写原始查询,并写得很好。

********编辑2 *********

现在,六年后,我为此不断获得积分。

无论我是否从一开始就不清楚,与我上面所说的相反,Eloquent在这一点上编写了很好的查询。 Use Eloquent-即使查询效率稍有降低,它也允许您编写非常清晰,可维护的代码,在我的职业生涯中,我认为这在大多数情况下更为重要。仅在性能增强至关重要且可以衡量影响的情况下,才编写原始查询并进行优化。

mysql performance join laravel processing-efficiency
1个回答
16
投票

您对自己的理解绝对正确。如果您使用join中的join()编写Laravel语句以连接两个或多个表,则它仅进行一个查询,而使用Eloquent技术的eager loading模型需要多个查询。

我应该不要急于加载,而只写我自己的连接语句

实际上,eager loading是一种使用Eloquent ORM轻松加载相关模型的技术,它在幕后使用Query Builder,使您无需亲自查询即可使用Eloquent Model Object,并以不同的方式表示数据。 Eloquent ORM您可以直接与模型交互,该模型表示数据库中具有附加功能的对象。最重要的是,它隐藏了SQL的复杂性,并允许您使用PHP代码以OOP方式进行数据库查询。

但是当您手动调用属于join类的Illuminate\Database\Query\Builder方法时,您将直接使用Query Builder,这需要您编写更多代码并且需要更多关于sql query的知识,因为它不会从查询中隐藏查询您,但可以帮助您更精确地进行查询,但仍然可以进行查询。

两者都是不同的东西,它们的工作方式不同。您可以使用术语GoogleORM vs Query Builder上进行搜索。

© www.soinside.com 2019 - 2024. All rights reserved.