ahmed-bhs/doctrine-doctor

GitHub: ahmed-bhs/doctrine-doctor

集成在Symfony Web Profiler中的运行时Doctrine ORM分析工具,检测N+1查询、安全漏洞和性能问题。

Stars: 81 | Forks: 7

# Doctrine 医生 Doctrine Doctor Logo **Doctrine ORM 运行时分析工具 — 集成到 Symfony Web Profiler** [![PHP 8.4+](https://img.shields.io/badge/PHP-8.4+-777BB4.svg?logo=php&logoColor=white)](https://php.net) [![Symfony 6.x | 7.x | 8.x](https://img.shields.io/badge/Symfony-6.x%20%7C%207.x%20%7C%208.x-000000.svg?logo=symfony&logoColor=white)](https://symfony.com) [![Doctrine ORM](https://img.shields.io/badge/Doctrine-3.x%20%7C%204.x-FC6A31.svg?logo=doctrine&logoColor=white)](https://www.doctrine-project.org) [![License MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/105c9c38e3162033.svg)](https://github.com/ahmed-bhs/doctrine-doctor/actions) [![PHPStan Level 8](https://img.shields.io/badge/PHPStan-Level%208-brightgreen.svg)](https://phpstan.org) [![Code Style](https://img.shields.io/badge/Code%20Style-PSR--12-blue.svg)](https://www.php-fig.org/psr/psr-12/) [![Packagist Version](https://img.shields.io/packagist/v/ahmed-bhs/doctrine-doctor.svg)](https://packagist.org/packages/ahmed-bhs/doctrine-doctor) 为什么选择运行时分析?

与静态分析工具(PHPStan、Psalm)在不执行代码的情况下分析不同,Doctrine Doctor:

  • 检测运行时 Doctrine 问题,通过分析实际执行上下文(实际参数、数据量、查询计划),包括 N+1 查询、实际查询性能瓶颈和缺失索引。
  • 集成到您的工作流程中:结果直接在开发期间的 Symfony Web Profiler 中显示
    • 📍 回溯:指向确切的模板行
    • 💡 建议:使用 ->addSelect(..) 预加载产品

Doctrine Doctor Demo

## 功能 ### 90+ 专业分析器 - **性能** — 检测 N+1 查询、缺失数据库索引、慢查询、过度 hydration、无限制的 findAll()、带集合连接的 setMaxResults()、过多 JOIN 以及查询缓存机会 - **安全** — 识别 DQL/SQL 注入漏洞、QueryBuilder SQL 注入风险、序列化中的敏感数据暴露、未保护的敏感字段和不安全的随机生成器 - **完整性** — 检测级联配置问题、双向不一致、缺失孤儿移除、类型不匹配、用于金钱的浮点数、未初始化的集合、EntityManager 在实体中以及架构违规 - **配置** — 验证数据库字符集/排序规则设置、时区处理、Gedmo trait 配置、MySQL 严格模式以及其他数据库级配置 ## ⚡ 快速开始(30 秒) **步骤 1:安装** ``` composer require --dev ahmed-bhs/doctrine-doctor ``` **步骤 2:完成!** 通过 [Symfony Flex](https://github.com/symfony/recipes-contrib/pull/1882) 自动配置。无需 YAML,无需配置文件。 **步骤 3:查看效果** 1. 在您的 Symfony 应用中刷新任意页面(`dev` 环境) 2. 打开 **Symfony Web Profiler**(底部工具栏) 3. 点击 **"Doctrine Doctor"** 面板 🩺 ## 配置(可选) 在 `config/packages/dev/doctrine_doctor.yaml` 中配置阈值: ``` doctrine_doctor: analyzers: n_plus_one: threshold: 5 # default, lower to 3 to be stricter slow_query: threshold: 100 # milliseconds (default) ``` **启用回溯**以查看问题在代码中的来源位置: ``` # config/packages/dev/doctrine.yaml doctrine: dbal: profiling_collect_backtrace: true ``` [完整配置参考 →](docs/user-guide/configuration.md) ## 示例:N+1 查询检测
优化前 — 100 次查询 优化后 — 1 次查询
``` $users = $repository->findAll(); ``` ``` {% for user in users %} {{ user.profile.bio }} {% endfor %} ``` ``` $users = $repository ->createQueryBuilder('u') ->leftJoin('u.profile', 'p') ->addSelect('p') ->getQuery() ->getResult(); ```
Doctrine Doctor 在运行时检测 N+1 模式 — 报告查询数量、执行时间、指向确切的模板行,并建议使用 addSelect() 进行预加载。
## 文档 | 文档 | 描述 | |----------|-------------| | [**完整分析器列表**](docs/user-guide/analyzers.md) | 涵盖性能、安全、完整性和配置的 **90+ 分析器**完整目录 — 找到适合您特定需求的完美分析器 | | [**架构指南**](docs/advanced/architecture.md) | **系统设计**、架构模式和技术内部细节的深入探讨 — 了解 Doctrine Doctor 的工作原理 | | [**配置参考**](docs/user-guide/configuration.md) | **所有配置选项**的综合指南 — 自定义分析器、阈值和输出以匹配您的工作流程 | | [**模板安全**](docs/advanced/template-security.md) | PHP 模板的必备**安全最佳实践** — 防止 XSS 攻击并确保模板安全渲染 | ## 许可证 MIT 许可证 — 详见 [LICENSE](LICENSE)。
**由 [Ahmed EBEN HASSINE](https://github.com/ahmed-bhs) 创建** Sponsor me on GitHub Buy Me A Coffee
标签:Doctrine ORM, ffuf, N+1查询, OpenVAS, ORM调试, PHP, PHPStan, PHP开发工具, SOC Prime, SQL优化, Symfony, Symfony扩展, Web Profiler, 安全漏洞检测, 开发工具, 性能分析, 数据库优化, 查询分析, 运行时分析