sql-reflect

快速定位 SQL 语句在 PHP/Laravel 代码中的触发位置

已扫描
适合谁
Laravel/PHP 后端开发者、需要调试 SQL 性能或数据问题的技术人员
不适合谁
非 PHP/Laravel 项目开发者、仅关注 SQL 结果不关心代码实现的分析人员
国内可用性
基本可用。基本可用,具体体验取决于依赖服务。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @willing-lin/sql-reflect

Skill 说明

命令、参数、文件名以原文为准

触发条件

当用户使用以下表述时触发此技能:

  • "帮我查找一下这句 sql 语句是在哪个地方的代码触发的"
  • "查询这个 SQL 代码位置"
  • "这条 SQL 是从哪里调用的"
  • "定位这条 SQL 的触发代码"
  • "查找 SQL 触发位置"

执行流程

1. 提取关键信息

从 SQL 语句中提取:

  • 主表名:FROM 后的表名(如 pk_transaction_meet_records
  • 关联表名:JOIN、EXISTS 子句中的表名
  • 关键条件:WHERE 中的特殊字段组合
  • 查询特征:特殊结构(如嵌套 EXISTS、特定字段组合)

2. 搜索代码位置

使用 grep 工具执行以下搜索(按优先级):

  1. 搜索表名(最精确)

- 搜索模式:pk_表名

- 文件类型:*.php

- 搜索范围:app/

  1. 搜索模型类名

- 转换规则:去掉 pk_ 前缀,转 PascalCase

- 如:pk_transaction_meet_recordsTransactionMeetRecord

  1. 搜索特殊字段组合

- 提取 WHERE 条件中的 2-3 个特征字段

- 搜索这些字段的组合出现位置

3. 分析搜索结果

对比 SQL 特征和代码:

  • 字段匹配:SQL 中的字段是否在代码的 select/where 中出现
  • 条件匹配:WHERE 条件是否与代码一致
  • 结构匹配:JOIN/EXISTS 结构是否对应 whereHas/join 等
  • 参数匹配:绑定参数的位置和数量

4. 定位关联关系

查找涉及的模型关联定义:

  • 搜索 function 关联名() 在 Models 目录
  • 分析 belongsTo/hasMany 等关联类型
  • 确认外键字段

5. 追踪调用链路

从找到的代码位置向上追踪:

  • 哪个 Controller 调用了这个 Service
  • 哪个方法实例化了这个 Model
  • 完整的调用路径

输出格式

## SQL 语句触发位置分析

### 📍 触发代码位置

**文件路径:** `/path/to/file.php`

**方法:** `methodName`(第 X 行开始)

**具体代码段:** 第 X-Y 行

---

### 🔍 SQL 生成逻辑

这段代码通过 [Laravel Eloquent 特性] 生成:

// 关键代码片段(10-20 行)

---

### 🔗 关联关系链

查询涉及的模型关联:

1. **`关联名`** - `模型类::关联方法()`(第 X 行)

---

### 📋 生成的 SQL 结构

-- SQL 结构说明

---

### 📂 调用链路

Controller.php:行号

↓ (调用说明)

Service.php:行号

Model::query()

最终 SQL

---

### 💡 使用场景

这个查询用于 [业务场景说明]

表名映射参考

表名模型类
pk_transaction_meet_recordsTransactionMeetRecord
pk_customerCustomers
pk_customer_cardCustomerCard
pk_order_offlineOrderOffline
pk_order_offline_refund_logsOrderOfflineRefundLogs
pk_order_onlineOrderOnline
pk_template_activityTemplateActivity
pk_guideStoreGuide
pk_storeStore
pk_customer_goods_attribute_tagCustomerGoodsAttributeTag
pk_guide_customerGuideCustomer
pk_promotion_goodsPromotionGoods
pk_order_goods_onlineOrderGoodsOnline
pk_order_goods_online_recordsOrderGoodsOnlineRecord

SQL 结构对应

SQL 结构Laravel 写法
EXISTS (SELECT...)whereHas() / whereExists()
LEFT JOINleftJoin() / with()
INNER JOINjoin()
BETWEEN ... AND ...whereBetween()
IN (...)whereIn()
NOT EXISTSwhereDoesntHave()

特殊字段组合

字段组合可能业务
business_no + source_type + is_metTransactionMeetRecord
order_no + refund_order_no + is_validOrderOfflineRefundLogs
customer_id + first_consume_time + second_consume_timeCustomerCard
guide_id + customer_id + relation_typeGuideCustomer
attribute_pid + attribute_id + numCustomerGoodsAttributeTag

注意事项

  1. 优先使用精确搜索(完整表名),再使用模糊搜索
  2. 注意表名前缀(pk_)和模型命名规则
  3. 如果找到多个匹配位置,按匹配度排序并说明差异
  4. SQL 中的 ? 在代码中对应变量或请求参数
  5. 某些 SQL 可能由多个代码位置生成,需列出所有可能
WL
@willing-lin

已收录 1 个 Skill

相关推荐