讨论:Laravel Eloquent 与追加的数据库查询

Discussion: Laravel Eloquent vs DB queries for appends

我有一个用例,我有一些模型(超过 20 个),其中一个模型与其他 15 个模型有关系,还有一些特征在其中有一些附加。

我想就如何查询这些问题征求意见 运行:

Sum some field on products table:

我应该使用这个语法吗:

$this->products()->sum('someField')

或者我应该使用:

DB::table('products')->sum('someField')

可能是一样的,但我不太确定,我问这个是因为性能非常重要,每一毫秒的节省都会受到赞赏。谢谢

在大数据方面,查询构建器在性能方面更快更好,但如果您只对一条记录或几条记录感兴趣,eloquent 更可取。

如果您正在寻找更好的关系,Eloquent 比查询生成器更好。

在您的情况下,您对速度更感兴趣,最好的选择是查询生成器

DB::table('products')->sum('someField')

大概用DB::table()

Eloquent 以及任何其他 ORM 的经验法则是,创建和“水化”对象会产生大量开销,如果存在包含查询和创建对象的相关表,则更糟.如果您在这里需要做的只是求和,那么您就避免了 ORM 的开销。

话虽如此,如果不是微优化,生成总和的代码在这种情况下应该是相似的,因为您使用的是模型 class,所以您不是在水化对象或对象集合。

您始终可以使用 system/data 对两种不同的方法进行基准测试。无论采用哪种方式,sum 都是一个 SQL 聚合,它将生成相似或完全相同的 SQL 和 return 你是一个数字而不是一个对象,其中关注水合作用和人口ORM 可能会查询相关对象的集合。