072103-修复配方新增失败问题.md 3.0 KB

修复配方新增失败问题

任务时间

  • 开始时间:2025年06月07日 21:03:09 CST
  • 完成时间:2025年06月07日 21:07:00 CST

问题描述

配方新增功能失败,访问 http://kku_laravel.local.gd/admin/game-items-recipes/create 时出现数据库字段缺失错误。

错误日志

[2025-06-07T21:02:46.043654+08:00] laravel.ERROR: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'success_rate' in 'field list' (Connection: mysql, SQL: insert into `kku_item_recipes` (`name`, `code`, `description`, `consume_group_id`, `reward_group_id`, `condition_group_id`, `success_rate`, `cooldown_seconds`, `sort_order`, `is_active`, `updated_at`, `created_at`) values (合成钢铁, gangtie, ?, 28, 38, ?, 1, 0, 0, 1, 2025-06-07 21:02:46, 2025-06-07 21:02:46))

问题分析

数据库表 kku_item_recipes 中缺少 success_ratecooldown_seconds 字段,但控制器和模型代码中使用了这些字段,导致数据库结构与代码不一致。

解决方案

1. 数据库结构修复

kku_item_recipes 表添加缺失的字段:

ALTER TABLE kku_item_recipes 
ADD COLUMN success_rate decimal(5,4) DEFAULT 1.0000 COMMENT '成功率(0-1之间的小数)' AFTER condition_group_id,
ADD COLUMN cooldown_seconds int DEFAULT 0 COMMENT '冷却时间(秒)' AFTER success_rate;

2. 模型更新

更新 app/Module/GameItems/Models/ItemRecipe.php

  • 在字段注释中添加 success_ratecooldown_seconds 字段
  • $fillable 数组中添加这两个字段
  • $casts 数组中添加字段类型转换

3. SQL文件更新

更新 app/Module/GameItems/Databases/GenerateSql/item_recipes.sql 文件,添加缺失的字段定义。

测试验证

使用MCP浏览器测试配方新增功能:

  1. 访问创建页面:http://kku_laravel.local.gd/admin/game-items-recipes/create
  2. 填写表单数据:
    • 配方名称:测试钢铁合成
    • 配方编码:test_steel_craft
    • 配方描述:测试钢铁合成配方
    • 消耗组:合成消耗: 铜矿石冶炼
    • 奖励组:合成奖励: 钢材制作
    • 成功率:1(100%)
    • 冷却时间:0秒
  3. 提交表单成功,显示"保存成功 !"消息

数据验证

SELECT * FROM kku_item_recipes WHERE code = 'test_steel_craft';

结果显示数据成功插入,包括新添加的字段都正确保存。

修改文件

  • app/Module/GameItems/Models/ItemRecipe.php
  • app/Module/GameItems/Databases/GenerateSql/item_recipes.sql

Git提交

git add .
git commit -m "修复配方新增失败问题:添加缺失的success_rate和cooldown_seconds字段

- 为kku_item_recipes表添加success_rate和cooldown_seconds字段
- 更新ItemRecipe模型的fillable和casts属性
- 更新自动生成的SQL文件
- 通过MCP测试验证修复成功"
git push

任务结果

✅ 配方新增功能修复成功 ✅ 数据库结构与代码保持一致 ✅ 通过MCP测试验证功能正常 ✅ 代码已提交并推送到远程仓库