提问者:小点点

Laravel急切加载与显式连接


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

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

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

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

一年后回到这一点,我个人认为,只要把问题写出来,原封不动,写得好。

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

好吧,六年后的今天,我一直为此得分。

我是否从一开始就不清楚,与我上面所说的相反,在这一点上雄辩写下了伟大的疑问。使用雄辩-即使有一点查询效率低下,它也允许您编写非常清晰、可维护的代码,在我职业生涯的这一点上,我认为这在大多数情况下更为重要。只有在性能增强非常关键的情况下才编写原始查询并进行优化,并且您可以衡量其影响。


共1个答案

匿名用户

你的理解完全正确。如果使用Laravel中的join()编写join语句来连接两个或多个表,那么它只进行一次查询,而使用elount模型和急切加载技术需要多个查询。

我是否应该不费心于急切的加载,而只是编写自己的连接语句

实际上,渴望加载是一种使用雄辩ORM轻松加载相关模型的技术,它在场景后面使用查询生成器,允许您使用雄辩模型对象,而无需通过您的查询自和表示不同的数据,使用雄辩的ORM,您可以直接与模型进行交互,该模型表示数据库中具有附加功能的对象。最重要的是,它隐藏了SQL的复杂性,并允许您使用PHP代码以OOP方式进行数据库查询。

但是,当您手动调用属于照明\数据库\查询\生成器类的连接方法时,您将直接使用查询生成器,这需要您编写更多的代码,并需要更多的知识sql查询因为它不会向您隐藏查询,而是帮助您更精确地进行查询,但您仍然进行查询。

两者都是不同的东西,工作方式也不同。您可以使用术语ORM vs Query BuilderGoogle上搜索。