默认情况下,将 Laravel Eloquent 模型设置为 eager load

2022-08-30 15:59:35

默认情况下,Laravel雄辩的模型设置为延迟加载。问题在于它对数据库进行大量查询,特别是在高流量期间,laravel应用程序崩溃,而在Yii 1上构建的类似应用程序没有问题。

安装Laravel的调试栏后,问题是每次页面加载时进行太多查询。下一步是查询优化。我一直在按照Laravel文档中的指示使用急切加载,但仍然有太多的查询。

我想知道是否有一种方法可以在开发环境中将Eloquent设置为仅“Eager Load”。这样,当页面无法加载时,识别问题将更容易。


答案 1

您可以直接在模型上将默认关系设置为“急切载荷”:

Class MyModel extends Model {
  protected $with = ['relation'];
}

答案 2

高数据库负载的解决方案是缓存

正确缓存可以在高流量期间为您提供令人难以置信的性能,因为它将常见的数据库查询减少到零,并将它们重定向到RAM 1,这更快。

启用路由缓存也会提高性能:

php artisan route:cache

编辑:

正如Fx32所指出的那样,您应该确保您需要Eloquent,并且直接向数据库进行相同的查询,联接您需要的表并进行单个查询而不是很多查询不会更好:

缓存不是修复错误数据库查询的好解决方案。Eloquent很棒,但通常最好使用一些联接来编写适当的查询。不要只是猛烈抨击你的数据库,然后将所有结果都扔进缓存中,因为这会带来新的问题。如果您的用例不是平面 CRUD API,则 ActiveRecord 模式可能不是最佳解决方案。如果您仔细选择并联接数据库中的结果,并希望加快此类项目的检索速度,则缓存可以提供帮助。


推荐