这听起来像是一个显而易见的问题,但我只想得到保证。
使用Laravel急切的加载功能,据我了解,它将创建两个查询以返回相关结果的完整列表(例如,如果您正在使用两个表)。但是,如果我错了,请纠正我,使用join语句将只留下一个查询,这将减少到服务器数据库(MySQL)的往返行程,并且查询效率更高。
我知道您可以在Laravel中编写联接查询,这很好,所以问题是:我不正确地认为,当从两个或多个表中检索相关数据时,我是否应该不急于加载而应该写我的书?自己的连接语句?
******编辑*******
回到一年后,我个人认为,只写原始查询,并写得很好。
********编辑2 *********
现在,六年后,我为此不断获得积分。
无论我是否从一开始就不清楚,与我上面所说的相反,Eloquent在这一点上编写了很好的查询。 Use Eloquent-即使查询效率稍有降低,它也允许您编写非常清晰,可维护的代码,在我的职业生涯中,我认为这在大多数情况下更为重要。仅在性能增强至关重要且可以衡量影响的情况下,才编写原始查询并进行优化。
您对自己的理解绝对正确。如果您使用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
的知识,因为它不会从查询中隐藏查询您,但可以帮助您更精确地进行查询,但仍然可以进行查询。
两者都是不同的东西,它们的工作方式不同。您可以使用术语Google
在ORM vs Query Builder
上进行搜索。