标签:自定义规则

用PHPStan自定义规则检测Laravel中withCount导致的隐式N+1与内存泄漏

#用PHPStan自定义规则检测Laravel中withCount导致的隐式N+1与内存泄漏

线上告警DB CPU飙升至92%,慢查日志显示大量SELECT COUNT(*) FROM orders WHERE user_id = ?,但代码明明用了withCount。深入排查发现,在循环中对已预加载的模型反复调用$user->orders()->count()会绕过缓存触发隐式N+1查询。本文揭示withCount的常见误用,并展示如何通过PHPStan自定义规则拦截此类隐患,避免内存泄漏与性能瓶颈。

阿牛 16
PHP
git checkout
用PHPStan自定义规则,自动揪出Laravel项目中遗漏的try-catch与事务回滚

#用PHPStan自定义规则,自动揪出Laravel项目中遗漏的try-catch与事务回滚

线上订单支付成功但库存没扣减?DBA查到事务卡在中间状态——一个被遗忘的DB::transaction()里,catch块只写了Log::error($e),却漏掉了throw $e或DB::rollBack()。PHPStan默认规则不管这个。本文教你写三个自定义规则:检查空catch/finally、未包裹try的方法、悬空事务。并塞进CI,用基线处理存量代码,彻底杜绝数据不一致。

阿牛 23
PHP
git checkout
用PHP Rector自定义规则,一键将ThinkPHP原始SQL迁移为Eloquent链式调用

#用PHP Rector自定义规则,一键将ThinkPHP原始SQL迁移为Eloquent链式调用

手动将ThinkPHP的Db::query()和Db::execute()迁移为Eloquent链式调用费时费力,且容易出错。本文介绍如何通过PHP Rector自定义规则,在AST层面精准识别原始SQL调用,自动转换为Eloquent链式调用,避免正则替换的陷阱。从零搭建Rector规则,解析SQL字符串,提取表名、WHERE条件、ORDER BY等,实现一键迁移。

阿牛 17
PHP
git checkout