stesie / phpstan-doctrine-checker
PHPStan Doctrine checker 用于查找无效的、过滤的 fetch-join 查询。
dev-master
2017-08-26 19:31 UTC
Requires
- doctrine/orm: ^2.5
- phpstan/phpstan: ^0.8.0
Requires (Dev)
- consistence/coding-standard: ^2.0
- jakub-onderka/php-console-highlighter: ^0.3.2
- jakub-onderka/php-parallel-lint: ^0.9.2
- phpunit/phpunit: ^6.0.3
- satooshi/php-coveralls: ^1.0
- slevomat/coding-standard: ^3.0
- squizlabs/php_codesniffer: ^3.0
This package is not auto-updated.
Last update: 2024-09-15 04:10:42 UTC
README
PHPStan Doctrine Checker 是 PHPStan 的扩展,它为 PHPStan 提供了额外的检查。
如果没有神奇的 PHPStan 工具,这个项目将无法实现。如果您考虑使用这个扩展,您也应该添加 phpstan-doctrine 扩展。
到目前为止,这只是一个概念验证,实际上不可用
首要目标是查找 Doctrine 的 QueryBuilder 构建无效的(fetch-join)查询的使用情况,这些查询是在过滤关联上进行的。这些问题很容易被忽略,并且在代码的另一个完全不同的点爆炸。
考虑这个
$user = $this->_em->createQueryBuilder() ->select('u', 'p') ->from(User::class, 'u') ->join('u.phoneNumbers', 'p') ->where('p.type = :type')->setParameter('type', 'work') ->getQuery() ->getResult();
这里关联的 phoneNumbers
是通过 fetch-join 和过滤来获取的。如果这个查询再次执行,比如所有类型为 "home" 的号码,那么 Doctrine 将 不会 重新水化已经水化的 User
实体,因此那些实体仍然会附加工作电话号码。
用法
要使用此扩展,请使用 composer
composer require --dev stesie/phpstan-doctrine-checker=@dev
并将 src/phpstan.neon
包含在您的项目 PHPStan 配置中
includes:
- vendor/stesie/phpstan-doctrine-checker/src/phpstan.neon
路线图
到目前为止,这个项目更多的是一个概念验证,实际上不实用。
我希望看到实现的功能
- 处理所有将对象水化的
getResult
变体(忽略其余部分) - 更健壮地解析各种
$qb->expr()->xxx
过滤 - 对于(非空?)
xxxToOne
关系上的过滤,不要发出警告,因为这些应该消除根(因此不会导致部分水化的对象) - 回传在内部连接的相关表上执行的过滤,即如果您连接了 foo 和 bar 表,但 baz(依赖于 bar)被过滤掉...那么如果 baz 被过滤掉,它将消除 bar,并且(可能)只部分水化 foo。
- 解析原始 DQL
贡献
欢迎任何贡献。