大家在开发 API 的时候是使用 Eloquent 多还是 DB 多呢?

最近公司做项目发现,在数据量稍大且有多级关联的情况下。Eloquent提供的with和load方法比DB慢上好几倍。
所以api尽量不用eloquent吗?谢谢大家指点一二!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

如果你是全局查询,一次返回非常大的记录数,Eloquent 必然慢很多,即便用了with,即便 sql 查询也不过 2、3次,但取出数据以后的格式化也很耗cpu和内容,自然慢很多,但如果只取一条数据,你看看是不是就没这么大差别呢(数据表记录总量不变)?

4年前 评论
讨论数量: 14

对于是不是API,对数据库的操作不都是一样的吗

4年前 评论
Epona

我都用eloquent,eloquent 也有join 的方法什么的。

4年前 评论

好几倍是指1ms变成7ms吗?

4年前 评论

@Epona join正式我使用的。我的意思是eloquent的with和load。比如我们写一个接口可以用join也可以用with。但是查询效率方面差了好多。一条sql就执行完的工作换成eloquent的with方法要用几条,最终把数据做合并。

4年前 评论

@Kamicloud 我用join前端响应大概0.7到0.9之间。换成用with要3到4秒。(关联表比较多)

4年前 评论
Epona

@fantasticcat join 蛋疼的是 你后续还需要自行处理数据格式, 比如一个 blog 关联一个 user, 使用 eloquent 可以直接返回user 对象,

$blog->user

而join的话就要麻烦一些了。

4年前 评论
Epona

@fantasticcat 用with的话laravel执行了几条sql?

4年前 评论

@Epona 他的relation就是这么实现的。你可以用querylog记录下日志看看。我很喜欢用关联,但是这个响应时间确实接受不了。

4年前 评论
Epona

@fantasticcat 是的,所以是看你写代码方便,还是要效率了。

4年前 评论
LOST

所以问题的本质,还是执行了几条 SQL 咯。还是看实际需求吧,直接联表查其实蛮爽的,自己组装数据,有的时候会出错。

4年前 评论
Complicated

除非性能问题,不然我都是有限用orm

4年前 评论

数据量大了再比较

4年前 评论

这个看实际需求 数据量不大的话用Eloquent

4年前 评论

如果你是全局查询,一次返回非常大的记录数,Eloquent 必然慢很多,即便用了with,即便 sql 查询也不过 2、3次,但取出数据以后的格式化也很耗cpu和内容,自然慢很多,但如果只取一条数据,你看看是不是就没这么大差别呢(数据表记录总量不变)?

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!