190951-农贸市场订单列表显示商品名称.md 3.8 KB

农贸市场订单列表显示商品名称

任务时间

  • 开始时间:2025-06-19 09:43:57
  • 完成时间:2025-06-19 09:51:00

任务描述

在农贸市场订单列表中添加商品名称显示,让管理员能够直观地看到订单对应的商品名称,而不仅仅是商品ID。

实施步骤

1. 为MexOrder模型添加与Item的关联关系

文件: app/Module/Mex/Models/MexOrder.php

  • 添加必要的use语句:

    use App\Module\GameItems\Models\Item;
    use Illuminate\Database\Eloquent\Relations\BelongsTo;
    
  • 添加关联关系方法:

    /**
    * 获取关联的商品信息
    *
    * @return BelongsTo
    */
    public function item(): BelongsTo
    {
      return $this->belongsTo(Item::class, 'item_id');
    }
    

2. 修改MexOrderRepository支持预加载关联

文件: app/Module/Mex/Repositories/MexOrderRepository.php

  • 添加构造函数支持预加载Item关联:

    /**
    * 构造函数,支持预加载关联关系
    *
    * @param array $with 预加载的关联关系
    */
    public function __construct(array $with = [])
    {
      // 默认预加载商品信息
      $defaultWith = ['item'];
      $relations = array_merge($defaultWith, $with);
          
      parent::__construct($relations);
    }
    

3. 修改MexOrderController添加商品名称显示

文件: app/Module/Mex/AdminControllers/MexOrderController.php

列表页面

  • 在商品ID列后添加商品名称列:

    $grid->column('item.name', '商品名称')->display(function ($value) {
      return $value ?: '未知商品';
    });
    

详情页面

  • 在商品ID字段后添加商品名称字段:

    $show->field('item.name', '商品名称')->as(function ($value) {
      return $value ?: '未知商品';
    });
    
  • 确保Repository预加载关联:

    return Show::make($id, new MexOrderRepository(['item']), function (Show $show) {
    

表单页面

  • 在商品ID字段后添加商品名称字段:

    $form->display('item.name', '商品名称')->with(function ($value) {
      return $value ?: '未知商品';
    });
    
  • 确保Repository预加载关联:

    return Form::make(new MexOrderRepository(['item']), function (Form $form) {
    

测试验证

1. 列表页面测试

2. 详情页面测试

3. 数据库验证

SELECT mo.id, mo.item_id, i.name as item_name 
FROM kku_mex_orders mo 
LEFT JOIN kku_item_items i ON mo.item_id = i.id 
WHERE mo.id = 58;

结果:✅ 数据关联正确

技术要点

1. Eloquent关联关系

  • 使用belongsTo关联定义MexOrder与Item的关系
  • 通过item_id外键关联到item_items

2. Repository预加载

  • 在Repository构造函数中默认预加载item关联
  • 避免N+1查询问题,提高性能

3. 容错处理

  • 当商品不存在时显示"未知商品"
  • 使用$value ?: '未知商品'进行空值处理

4. Dcat Admin集成

  • 使用$grid->column('item.name')访问关联字段
  • 使用$show->field('item.name')在详情页显示
  • 使用$form->display('item.name')在表单页显示

代码提交

  • 提交哈希:5ce17ee0
  • 提交信息:农贸市场订单列表添加商品名称显示
  • 修改文件:
    • app/Module/Mex/AdminControllers/MexOrderController.php
    • app/Module/Mex/Models/MexOrder.php
    • app/Module/Mex/Repositories/MexOrderRepository.php

效果展示

  • 列表页面新增"商品名称"列,显示具体商品名称
  • 详情页面新增"商品名称"字段,便于查看
  • 表单页面新增"商品名称"字段,提供完整信息
  • 提升了管理员的使用体验,无需记忆商品ID对应的商品名称