201402-土地升级配置管理列表显示土地名字.md 3.4 KB

土地升级配置管理列表显示土地名字

任务时间: 2025年06月20日 14:02
任务状态: ✅ 已完成
提交哈希: 8647d5a8

任务描述

优化土地升级配置管理后台页面,在列表和详情页面显示土地名字而不是ID,提升用户体验。

实现内容

1. 修改控制器显示逻辑

文件: app/Module/Farm/AdminControllers/FarmLandUpgradeConfigController.php

列表页面优化

  • 修改from_type_idto_type_id列显示,使用关联的土地类型名字
  • 使用预加载的关系$this->fromType$this->toType获取土地名字
  • 对于不存在的土地类型,显示"未知类型 (ID: X)"

详情页面优化

  • 修改详情页面字段显示,显示土地名字和ID
  • 修复materialsconditions字段显示问题
  • 移除了错误的fieldModelCatsJson调用,改为正确的字段显示

2. 优化Repository性能

文件: app/Module/Farm/Repositories/FarmLandUpgradeConfigRepository.php

  • 在构造函数中预加载土地类型关系['fromType', 'toType']
  • 提高列表和详情页面的查询性能,避免N+1查询问题

3. 数据清理

  • 清理了无效的土地升级配置数据
  • 删除了引用不存在土地类型ID(5-15)的配置记录
  • 保留了有效的升级路径:普通土地→红土地→黑土地→金土地

技术要点

关系预加载

public function __construct()
{
    parent::__construct(['fromType', 'toType']);
}

列表显示优化

$grid->column('from_type_id', '起始土地类型')->display(function ($fromTypeId) {
    return $this->fromType ? $this->fromType->name : "未知类型 (ID: {$fromTypeId})";
})->sortable();

详情页面显示

$show->field('from_type_id', '起始土地类型')->as(function ($fromTypeId) {
    return $this->fromType ? "{$this->fromType->name} (ID: {$fromTypeId})" : "未知类型 (ID: {$fromTypeId})";
});

测试验证

列表页面测试

  • ✅ 访问 http://kku_laravel.local.gd/admin/farm-land-upgrade-configs
  • ✅ 确认显示土地名字:普通土地、红土地、黑土地、金土地
  • ✅ 确认排序功能正常
  • ✅ 确认筛选功能正常

详情页面测试

  • ✅ 访问详情页面 /admin/farm-land-upgrade-configs/1
  • ✅ 确认显示"普通土地 (ID: 1) → 红土地 (ID: 2)"
  • ✅ 确认消耗组和条件组字段正常显示

问题解决

1. 详情页面错误

问题: 访问详情页面时出现"materials is not a model casts"错误 原因: 使用了fieldModelCatsJson方法处理非JSON字段 解决: 改为使用正确的字段显示方法,处理消耗组和条件组ID

2. 关系预加载问题

问题: Repository构造函数中错误使用$this->with()方法 原因: EloquentRepository的构造函数参数应该是关系数组 解决: 修改为parent::__construct(['fromType', 'toType'])

最终效果

  • 📋 列表页面: 清晰显示土地升级路径,如"普通土地 → 红土地"
  • 📄 详情页面: 显示完整信息,如"普通土地 (ID: 1)"
  • 性能优化: 通过预加载关系避免N+1查询
  • 🧹 数据清理: 移除无效配置,保持数据一致性

相关文件

  • app/Module/Farm/AdminControllers/FarmLandUpgradeConfigController.php
  • app/Module/Farm/Repositories/FarmLandUpgradeConfigRepository.php
  • app/Module/Farm/Models/FarmLandUpgradeConfig.php
  • app/Module/Farm/Models/FarmLandType.php