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


Set Laravel Eloquent model's to eager load by default

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

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

我想知道是否有办法在开发环境中将 Eloquent 设置为仅"渴望加载"。这样,当页面加载失败时,识别问题会更容易。

您可以直接在模型上将默认关系设置为"预先加载":

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

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

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

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

php artisan route:cache

编辑:

正如 Fx32 点一样,您应该确保您需要 Eloquent 并且最好直接对数据库进行相同的查询,连接您需要的表并进行单个查询而不是很多查询:

缓存不是修复错误数据库查询的好解决方案。 雄辩很棒,但通常最好使用 有些加入。不要只是猛击你的数据库,然后扔掉所有的 导致缓存,因为它会带来新问题。如果您使用 案例不是平面 CRUD API,ActiveRecord 模式可能不是 无论如何,最好的解决方案。如果您仔细选择并加入来自 数据库,并希望加快此类项目的检索速度,缓存可以 帮助。