最后更新时间:2024年5月
为了提高代码的可读性和一致性,我们对 FarmLandUpgradeConfig 模型中的字段名称进行了调整:
consume_group_id 改为 materials_group_idcondition_group_id 改为 conditions_group_id这样命名更加直观,与原有的 materials 和 conditions 字段名称保持一致性。
由于没有现有数据需要迁移,我们直接重新创建了 farm_land_upgrade_configs 表:
-- 删除旧表(如果存在)
DROP TABLE IF EXISTS `kku_farm_land_upgrade_configs`;
-- 创建新表
CREATE TABLE `kku_farm_land_upgrade_configs` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`from_type_id` int(10) unsigned NOT NULL COMMENT '起始土地类型ID',
`to_type_id` int(10) unsigned NOT NULL COMMENT '目标土地类型ID',
`materials_group_id` int(10) unsigned DEFAULT NULL COMMENT '消耗组ID,关联game_consume_groups表',
`conditions_group_id` int(10) unsigned DEFAULT NULL COMMENT '条件组ID,关联game_condition_groups表',
`materials` json DEFAULT NULL COMMENT '升级所需材料(已废弃,使用materials_group_id替代)',
`conditions` json DEFAULT NULL COMMENT '其他升级条件(已废弃,使用conditions_group_id替代)',
`created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_from_to_type` (`from_type_id`,`to_type_id`),
KEY `idx_materials_group_id` (`materials_group_id`),
KEY `idx_conditions_group_id` (`conditions_group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='土地升级配置';
在 FarmLandUpgradeConfig 模型中添加了新的关联方法:
/**
* 获取关联的消耗组
*
* @return BelongsTo
*/
public function materialsGroup(): BelongsTo
{
return $this->belongsTo(GameConsumeGroup::class, 'materials_group_id', 'id');
}
/**
* 获取关联的条件组
*
* @return BelongsTo
*/
public function conditionsGroup(): BelongsTo
{
return $this->belongsTo(GameConditionGroup::class, 'conditions_group_id', 'id');
}
同时,为了保持向后兼容性,保留了旧的关联方法:
/**
* 获取关联的消耗组(兼容旧代码)
*
* @return BelongsTo
* @deprecated 使用 materialsGroup() 替代
*/
public function consumeGroup(): BelongsTo
{
return $this->materialsGroup();
}
/**
* 获取关联的条件组(兼容旧代码)
*
* @return BelongsTo
* @deprecated 使用 conditionsGroup() 替代
*/
public function conditionGroup(): BelongsTo
{
return $this->conditionsGroup();
}
在 FarmLandUpgradeConfigController 类中修改了字段名称:
// 添加消耗组选择
$form->select('materials_group_id', '消耗组')
->options(function () {
return GameConsumeGroup::pluck('name', 'id')->toArray();
})
->help('选择消耗组后,将使用消耗组中的消耗项作为升级所需材料,而不使用 materials 字段');
// 添加条件组选择
$form->select('conditions_group_id', '条件组')
->options(function () {
return GameConditionGroup::pluck('name', 'id')->toArray();
})
->help('选择条件组后,将使用条件组中的条件项作为升级条件,而不使用 conditions 字段');
在 LandLogic 类中修改了 getAvailableUpgradePaths 方法,使用新的字段名称:
return [
'from_type_id' => $path->from_type_id,
'to_type_id' => $path->to_type_id,
'to_type_name' => $path->toType->name,
'materials' => ['materials' => $materials], // 保持与旧版本兼容的格式
'conditions' => $conditions,
'materials_group_id' => $path->materials_group_id,
'conditions_group_id' => $path->conditions_group_id,
'condition_check' => [
'success' => $conditionCheck['success'],
'message' => $conditionCheck['message']
]
];
执行 SQL 脚本,重新创建表结构:
mysql -u username -p database_name < app/Module/Farm/Database/recreate_farm_land_upgrade_configs_table.sql
在代码中,使用新的字段名称和关联方法:
// 获取消耗组
$materialsGroup = $config->materialsGroup;
// 获取条件组
$conditionsGroup = $config->conditionsGroup;
materials 和 conditions 字段被标记为已废弃,建议使用 materials_group_id 和 conditions_group_id 字段替代。