首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel热切加载与显式连接

Laravel热切加载与显式连接
EN

Stack Overflow用户
提问于 2014-06-17 19:00:14
回答 1查看 7.2K关注 0票数 23

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

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

我知道您可以用Laravel编写连接查询,这很好,所以问题是:假设从两个或多个表检索相关数据时,我不应该费心加载,而应该只编写自己的join语句,这是错误的吗?

*编辑*

回到一年后的这个问题上,我个人认为,只需写好这些查询,就行了,然后把它们写好。

*编辑2*

好吧,六年后,我一直在为这件事拿分。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-17 21:23:34

你的理解是完全正确的。如果您编写一个join语句来使用join()Laravel中连接两个或多个表,那么它只提供一个查询,其中使用带有eager loading技术的Eloquent模型需要多个查询。

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

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

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

两者是不同的东西,它们的工作方式也不同。您可以使用术语Google搜索ORM vs Query Builder

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24271416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档