默认情况下,将Laravel Eloquent模型设置为急切加载

时间:2015-11-18 18:03:26

标签: php laravel

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

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

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

2 个答案:

答案 0 :(得分:43)

您可以将默认关系设置为" eager load"直接在模型上:

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

答案 1 :(得分:2)

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

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

启用Route Caching也会提高性能:

php artisan route:cache

编辑:

作为Fx32点,你应该确保你需要Eloquent并且不会更好地直接向DB提出相同的查询,加入你需要的表并进行单个查询而不是很多:

  

缓存不是一个很好的解决方案,可以修复错误的数据库查询。   Eloquent很棒,但通常最好用它来编写适当的查询   一些加入。不要只是抨击你的数据库,然后扔掉所有的   导致缓存,因为它会引入新问题。如果你使用   case不是一个扁平的CRUD API,ActiveRecord模式可能不是   最好的解决方案。如果您仔细选择并加入结果   DB,并希望加快检索此类项目,缓存即可   帮助