任务时间: 2025年01月03日 15:00
任务状态: ✅ 已完成
开发者: AI Assistant
用户访问奖励组编辑页面 http://kku_laravel.local.gd/admin/game-reward-groups/29/edit 时出现数据库错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'kku_game_tag_relations.game_tag_id' in 'field list'
错误原因是Laravel的多态关联配置中,期望的字段名是 game_tag_id,但实际数据库表中的字段名是 tag_id。
kku_game_tag_relations 表的实际字段结构:
id - 主键tag_id - 标签ID(外键关联game_tags表)taggable_type - 关联模型类型taggable_id - 关联模型IDcreated_at / updated_at - 时间戳在模型的 morphToMany 方法中,没有指定正确的外键名称,导致Laravel使用默认的命名规则生成了错误的字段名。
修复前:
public function tags()
{
return $this->morphToMany(GameTag::class, 'taggable', 'game_tag_relations');
}
修复后:
public function tags()
{
return $this->morphToMany(GameTag::class, 'taggable', 'game_tag_relations', 'taggable_id', 'tag_id');
}
修复前:
public function rewardGroups()
{
return $this->morphedByMany(GameRewardGroup::class, 'taggable', 'game_tag_relations');
}
修复后:
public function rewardGroups()
{
return $this->morphedByMany(GameRewardGroup::class, 'taggable', 'game_tag_relations', 'tag_id', 'taggable_id');
}
morphToMany($related, $name, $table, $foreignPivotKey, $relatedPivotKey)
$related: 关联的模型类$name: 多态关联的名称前缀$table: 中间表名称$foreignPivotKey: 当前模型在中间表中的外键$relatedPivotKey: 关联模型在中间表中的外键morphedByMany($related, $name, $table, $foreignPivotKey, $relatedPivotKey)
参数含义与 morphToMany 相同,但是外键的角色相反。
http://kku_laravel.local.gd/admin/game-reward-groups/29/edithttp://kku_laravel.local.gd/admin/game-consume-groupshttp://kku_laravel.local.gd/admin/game-condition-groupsapp/Module/Game/Models/GameRewardGroup.phpapp/Module/Game/Models/GameConsumeGroup.phpapp/Module/Game/Models/GameConditionGroup.phpapp/Module/Game/Models/GameTag.phpapp/Module/Game/Docs/标签系统设计.md多态关联配置要点:
调试方法:
预防措施: