现象:setup:upgrade显示无更新,但模块所需列不存在,patch_list却有Patch类名。删除记录强制重跑可能产生副作用。
| 阶段 | 具体操作 |
|---|---|
| 取证 | 确认变更来自db_schema.xml、Schema Patch还是Data Patch,Declarative Schema会先执行。 |
| 定位 | 核对代码版本、模块版本和数据库备份时间,数据库回滚但patch_list未同步很常见。 |
| 修复 | 阅读Patch是否幂等,在数据库副本删除对应记录并运行setup:upgrade观察实际SQL。 |
| 复核 | 不可安全重跑时写新的修复Patch,检测列或数据缺失后补齐,不篡改旧Patch历史。 |
可执行检查
SELECT patch_name FROM patch_list WHERE patch_name LIKE '%Vendor\Module%';
SHOW COLUMNS FROM vendor_table LIKE 'custom_column';
bin/magento setup:db:status
bin/magento setup:upgrade通过标准:全新安装、正常升级和问题库修复得到同一Schema,再次setup:upgrade无重复副作用。

