我是Laravel的新手和一般的活跃记录。如果这是一个愚蠢的问题,我会提前道歉。但我想确定我的想法是否正确。
背景:
laravel文档在雄辩的ORM部分中说:
由于Eloquent模型是查询构建器,因此您应该查看所有的 查询构建器上可用的方法。您可以使用其中任何一种 您的Eloquent查询中的方法。
多次提到,在处理非常大的数据时,雄辩的查询并不是很好,而且通常最好使用基本查询构建器。
我想知道声明:
您可以在Eloquent查询中使用这些方法中的任何一种。
我读过的很多例子将两者分开(E.G。
DB::table('table')->get();
通常比
快model::all()
)比较表现。
我打算用Laravel创建我的新项目,并考虑使用这两种功能(基本查询构建器方法处理复杂和大型数据,然后使用特定的雄辩方法处理其他任何内容)。
我的问题:
我正在考虑如何使我的代码可读,干净且合理有效。我将处理可能的大数据(E.G.数千到数百万行和20到30个表在两个数据库上)。这样说是安全的:
DB::table('table')->get();
与:
相同MODEL::get();
并假设两者都只返回一个集合,在大数据中通常比
更快MODEL::all();
?感谢。
答案 0 :(得分:5)
重要的是要看每个陈述的回报差异。虽然两者都会返回一个集合,但是集合中的项目会产生不同。
DB::table('table')->get()
返回一个stdClass对象的集合,而Laravel没有进行额外的处理。如果您使用的是SoftDeletes,则会忽略该功能。它还将返回行中的所有字段。
MODEL::get()
返回一组MODEL。 Laravel会将每个结果加载到一个新的MODEL实例中。像SoftDeletes这样的特性以及像hidden []和visible []这样的属性将得到尊重。
根据您将要做的具体数据,可能是决定因素。如果您在回复中返回它,您可能希望使用MODEL方法,因此特性和属性得到尊重。如果您正在处理返回的数据用于其他用途,那么DB方法可能是最好的。