gpt4 book ai didi

mysql - 为什么 Laravel 不自动优化模型查询?

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:33 25 4
gpt4 key购买 nike

直到今天,我一直依赖 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 预加载通过使用连接非常好。


感谢您的帮助。

最佳答案

如果你真的想使用连接而不是 Eloquent 计算查询,我想你可以使用流畅的查询构建器(通过 DB facade 随 Laravel 一起提供)并将该代码粘贴到模型的方法中以保持一切都很好,SRP。

例如:

class Company extends Model {
public function sqlWithJoin() {
$users = DB::table('company')
->leftJoin('user', 'company.id', '=', 'user.company_id')
->get();

return $users;
}
}

这将为您生成一个正确的连接查询。

至于为什么要这样做,您必须对这两个选项进行基准测试,看看哪个选项能为您的特定数据提供最佳性能。我不会概括说一个选项总是比另一个选项具有更好/更差的性能。

关于mysql - 为什么 Laravel 不自动优化模型查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36316249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com