【发布时间】:2016-03-30 17:58:17
【问题描述】:
直到今天我还依赖 Laravel 的关系,但是自从我打开了 mysql 日志之后,我很失望。
当我执行代码时
Company::with(['users', 'machines'])->get()
mysql.log 看起来是这样的
select * from `company` where `company`.`id` = '48' limit 1
select * from `user` where `user`.`company_id` in ('48')
select * from `machine` where `machine`.`company_id` in ('48')
为什么 Laravel 不使用连接来进行急切获取?另外,有什么方法可以提高性能并仍在使用 Laravel 模型?
我知道 Doctrine ORM 急切加载通过使用连接可以很好地工作。
感谢您的帮助。
【问题讨论】:
-
请注意,您不需要多个
->with()子句,只需使用数组语法:->with(["users", "machines"])和dot.notation进行链接:->with(["users", "users.other"])等。 -
@TimLewis 谢谢,已修复。
-
没问题 :) 我认为它不会以任何方式影响性能,但它使代码更易于阅读/维护。另外,好问题;我从来没有真正停下来检查过这样的日志,我知道为什么会这样做,但不知道这是否是最优化的。
-
@TimLewis 如果您觉得您的想法值得分享,请与我们的社区分享:)
-
嗯,这不是一个真正的答案,但我想我可以提供一些见解
标签: mysql laravel doctrine query-builder rdbms