这听起来似乎是个明显的问题,但我只想得到一些保证。
使用Laravel的急切加载功能,根据我的理解,它将创建两个查询以返回相关结果的完整列表(例如,如果您正在使用两个表)。但是,如果我错了,请纠正我,使用连接语句只会给你带来一个查询,这样可以减少到服务器数据库(MySQL)的往返次数,并且查询效率更高。
我知道你可以在Laravel中编写连接查询,这很棒,所以问题是:我是不正确地假设从两个或多个表中检索相关数据时,我是否应该费心去加载而不是只写我自己的联合声明?
******编辑*******
回到这一年之后,我个人认为,只需编写查询,生成并写好。
答案 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
。