[扩展推荐] Laravel Query Detector 数据模型查询的 N+1 问题捕杀神器

file

Marcel Pociot 开发的 Laravel Query Detector 组件用来检测 N+1 查询问题。应用运行于 debug 模式时,该组件将自动监测所有 N+1 查询。

file

在开发应用过程中,该组件将实时监测所有查询,并以 JavaScript alert() 的方式通知监测到的 N+1 查询。当然,你也可以修改配置文件,将报告发送到 Laravel 日志。

以下是默认配置,你可以直接使用或者覆盖配置项:

<?php

return [
    /*
     * 启用或关闭查询监测
     * 如果设置为 "null", 将使用 app.debug 配置值
     */
    'enabled' => env('QUERY_DETECTOR_ENABLED', null),

    /*
     * N + 1查询检测的阈值级别。如果关联查询超过此阀值,
     * 监测器将发出通知
     */
    'threshold' => 1,

    /*
     * 关联模型白名单
     *
     * 现在,你需要将模型关系定义为模型上的类名和属性名
     * 因此,如果 「Author」模型有一个指向「Post」类的「posts」关联,也需要添加进来
     * 「posts」属性和「Post」类,由于关系可以用多种途径解析
     */
    'except' => [
        //Author::class => [
        //    Post::class,
        //    'posts',
        //]
    ],

    /*
     * 定义输出形式,可用的有:
     *
     * Alert:
     * 页面展示一个 alert
     * \BeyondCode\QueryDetector\Outputs\Alert::class
     *
     * Log:
     * 将 N+1 查询写入 Laravel 日志文件
     * \BeyondCode\QueryDetector\Outputs\Log::class
     */
    'output' => \BeyondCode\QueryDetector\Outputs\Alert::class,

];

例如,如果你需要更新配置发送 N+1 问题到日志,可以按照如下配置:

'output' => \BeyondCode\QueryDetector\Outputs\Log::class

使用 composer 安装:

composer require beyondcode/laravel-query-detector --dev

值得注意的是,此配置文件将来可能发生改变,看起来这个版本在编写时像是预发布版本。

了解更多

你可以通过 GitHub 源码 了解更多关于此组件。

如果你不了解或需要复习 N+1 问题,我编写的 使用 Eager Loading 优化 Laravel Eloquent 查询 解释了 N+1 问题和使用 eager loading 如何优化应用,附加一个手动 N + 1查询实例演示并使用 eager loading 更新。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/laravel-query-d...

译文地址:https://learnku.com/laravel/t/14691/exte...

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1
Summer

已经用上,类型设置为 alert ,会一直强迫你 fix 掉问题,简直是神奇哈

file

5年前 评论
Summer

已经用上,类型设置为 alert ,会一直强迫你 fix 掉问题,简直是神奇哈

file

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!