在农贸市场订单列表中添加商品名称显示,让管理员能够直观地看到订单对应的商品名称,而不仅仅是商品ID。
文件: 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');
}
文件: 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);
}
文件: 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) {
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;
结果:✅ 数据关联正确
belongsTo关联定义MexOrder与Item的关系item_id外键关联到item_items表item关联$value ?: '未知商品'进行空值处理$grid->column('item.name')访问关联字段$show->field('item.name')在详情页显示$form->display('item.name')在表单页显示5ce17ee0