字段名称变更.md 4.8 KB

字段名称变更

最后更新时间:2024年5月

1. 概述

为了提高代码的可读性和一致性,我们对 FarmLandUpgradeConfig 模型中的字段名称进行了调整:

  1. consume_group_id 改为 materials_group_id
  2. condition_group_id 改为 conditions_group_id

这样命名更加直观,与原有的 materialsconditions 字段名称保持一致性。

2. 数据库变更

由于没有现有数据需要迁移,我们直接重新创建了 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='土地升级配置';

3. 代码变更

3.1 模型变更

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();
}

3.2 控制器变更

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 字段');

3.3 逻辑层变更

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']
    ]
];

4. 使用方法

4.1 执行数据库变更

执行 SQL 脚本,重新创建表结构:

mysql -u username -p database_name < app/Module/Farm/Database/recreate_farm_land_upgrade_configs_table.sql

4.2 使用新的字段名称

在代码中,使用新的字段名称和关联方法:

// 获取消耗组
$materialsGroup = $config->materialsGroup;

// 获取条件组
$conditionsGroup = $config->conditionsGroup;

5. 注意事项

  1. 由于重新创建了表,所有现有数据将被清除。请确保在执行此操作前已备份任何重要数据。
  2. 为了保持向后兼容性,保留了旧的关联方法,但建议使用新的方法。
  3. 在新表中,materialsconditions 字段被标记为已废弃,建议使用 materials_group_idconditions_group_id 字段替代。