这听起来可能是个显而易见的问题,但我只是想得到一些安慰。
使用Laravel的热切加载功能,据我所知,它将创建两个查询,以返回一个完整的相关结果列表(例如,如果您正在处理两个表)。但是,如果我错了,如果我错了,使用join语句只会给您留下one查询,这会减少一次到服务器数据库(MySQL)的往返行程,并且是一个更高效的查询。
我知道您可以用Laravel编写连接查询,这很好,所以问题是:假设从两个或多个表检索相关数据时,我不应该费心加载,而应该只编写自己的join语句,这是错误的吗?
*编辑*
回到一年后的这个问题上,我个人认为,只需写好这些查询,就行了,然后把它们写好。
*编辑2*
好吧,六年后,我一直在为这件事拿分。
我是否从一开始就不清楚,与我前面所说的相反,在这一点上雄辩地写了很好的疑问。使用雄辩的--即使有轻微的查询效率低下,它也允许您编写非常清晰、可维护的代码,在我的职业生涯中,这一点在大多数情况下都更为重要。只有编写原始查询并在性能提高至关重要的情况下进行优化,并且可以度量其影响。
发布于 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。
https://stackoverflow.com/questions/24271416
复制相似问题