Laravel渴望加载vs显式连接

时间:2014-06-17 19:00:15

标签: mysql performance join laravel processing-efficiency

这听起来似乎是个明显的问题,但我只想得到一些保证。

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

我知道你可以在Laravel中编写连接查询,这很棒,所以问题是:我是不正确地假设从两个或多个表中检索相关数据时,我是否应该费心去加载而不是只写我自己的联合声明?

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

回到这一年之后,我个人认为,只需编写查询,生成并写好。

1 个答案:

答案 0 :(得分:14)

你对自己的理解绝对正确。如果您使用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