创建时间: 2025年06月16日 10:57 完成时间: 2025年06月16日 11:30 任务类型: 功能增强 + 代码重构 关联模块: UrsPromotion模块
在后台URS用户推荐关系列表中增加农场用户信息列,展示该人的用户信息(如果进入了农场)。
文件: app/Module/UrsPromotion/Models/UrsUserReferral.php
添加了与农场用户的关联关系:
/**
* 获取农场用户信息(通过映射关系)
*/
public function farmUser(): BelongsTo
{
return $this->belongsTo(\App\Module\User\Models\User::class, 'urs_user_id', 'id')
->join('urs_promotion_user_mappings', 'users.id', '=', 'urs_promotion_user_mappings.user_id')
->where('urs_promotion_user_mappings.urs_user_id', '=', $this->urs_user_id)
->where('urs_promotion_user_mappings.status', '=', UrsUserMapping::STATUS_VALID);
}
/**
* 获取推荐人农场用户信息(通过映射关系)
*/
public function referrerFarmUser(): BelongsTo
{
return $this->belongsTo(\App\Module\User\Models\User::class, 'urs_referrer_id', 'id')
->join('urs_promotion_user_mappings', 'users.id', '=', 'urs_promotion_user_mappings.user_id')
->where('urs_promotion_user_mappings.urs_user_id', '=', $this->urs_referrer_id)
->where('urs_promotion_user_mappings.status', '=', UrsUserMapping::STATUS_VALID);
}
文件: app/Module/UrsPromotion/Repositorys/UrsUserReferralRepository.php
添加了JOIN查询来获取农场用户信息:
/**
* 自定义查询构建器
*/
public function query()
{
return $this->model()
->leftJoin('urs_promotion_user_mappings as user_mapping', function($join) {
$join->on('urs_promotion_user_referrals.urs_user_id', '=', 'user_mapping.urs_user_id')
->where('user_mapping.status', '=', UrsUserMapping::STATUS_VALID);
})
->leftJoin('users as farm_user', 'user_mapping.user_id', '=', 'farm_user.id')
->leftJoin('user_infos as farm_user_info', 'farm_user.id', '=', 'farm_user_info.user_id')
->leftJoin('urs_promotion_user_mappings as referrer_mapping', function($join) {
$join->on('urs_promotion_user_referrals.urs_referrer_id', '=', 'referrer_mapping.urs_user_id')
->where('referrer_mapping.status', '=', UrsUserMapping::STATUS_VALID);
})
->leftJoin('users as referrer_farm_user', 'referrer_mapping.user_id', '=', 'referrer_farm_user.id')
->leftJoin('user_infos as referrer_farm_user_info', 'referrer_farm_user.id', '=', 'referrer_farm_user_info.user_id')
->select([
'urs_promotion_user_referrals.*',
'farm_user.username as farm_username',
'farm_user_info.nickname as farm_nickname',
'referrer_farm_user.username as referrer_farm_username',
'referrer_farm_user_info.nickname as referrer_farm_nickname',
]);
}
文件: app/Module/UrsPromotion/AdminControllers/UrsUserReferralController.php
// 农场用户信息列
$grid->column('farm_username', '农场用户名')->display(function ($value) {
return $value ?: '<span class="label label-warning">未进入农场</span>';
});
$grid->column('farm_nickname', '农场用户昵称')->display(function ($value) {
return $value ?: '<span class="text-muted">无昵称</span>';
});
// 推荐人农场用户信息列
$grid->column('referrer_farm_username', '推荐人农场用户名')->display(function ($value) {
return $value ?: '<span class="label label-warning">未进入农场</span>';
});
$grid->column('referrer_farm_nickname', '推荐人农场昵称')->display(function ($value) {
return $value ?: '<span class="text-muted">无昵称</span>';
});
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('urs_user_id', 'URS用户ID');
$filter->equal('urs_referrer_id', 'URS推荐人ID');
$filter->like('farm_username', '农场用户名');
$filter->like('farm_nickname', '农场用户昵称');
$filter->like('referrer_farm_username', '推荐人农场用户名');
$filter->like('referrer_farm_nickname', '推荐人农场昵称');
$filter->equal('status', '状态')->select([
UrsUserReferral::STATUS_INVALID => '无效',
UrsUserReferral::STATUS_VALID => '有效',
]);
$filter->between('created_at', '创建时间')->datetime();
});
// 农场用户信息
$show->divider('农场用户信息');
$show->field('farm_username', '农场用户名')->as(function ($value) {
return $value ?: '未进入农场';
});
$show->field('farm_nickname', '农场用户昵称')->as(function ($value) {
return $value ?: '无昵称';
});
// 推荐人农场用户信息
$show->divider('推荐人农场用户信息');
$show->field('referrer_farm_username', '推荐人农场用户名')->as(function ($value) {
return $value ?: '未进入农场';
});
$show->field('referrer_farm_nickname', '推荐人农场用户昵称')->as(function ($value) {
return $value ?: '无昵称';
});
http://kku_laravel.local.gd/admin/urs-promotion/user-referralshttp://kku_laravel.local.gd/admin/urs-promotion/user-referrals/39✅ 成功在后台URS用户推荐关系列表中增加了农场用户信息列
✅ 实现了完整的列表、筛选、详情功能
✅ 提供了友好的用户体验和清晰的信息展示
✅ 代码已提交并推送到远程仓库
提交信息:
在初始实现后,根据用户反馈"采用JOIN是不好的,应该进行关联查询",进行了代码重构:
在UrsUserMapping模型中添加关联关系:
/**
* 获取关联的农场用户
*/
public function user(): BelongsTo
{
return $this->belongsTo(\App\Module\User\Models\User::class, 'user_id', 'id');
}
Repository使用with预加载:
public function eloquent()
{
return parent::eloquent()
->with([
'userMapping' => function($query) {
$query->where('status', UrsUserMapping::STATUS_VALID)
->with('user.info');
},
'referrerMapping' => function($query) {
$query->where('status', UrsUserMapping::STATUS_VALID)
->with('user.info');
}
]);
}
Controller使用关联路径访问数据:
// 列表页面
$grid->column('userMapping.user.username', '农场用户名')->display(function ($value) {
return $value ?: '<span class="label label-warning">未进入农场</span>';
});
// 详情页面
$show->field('farm_username', '农场用户名')->as(function ($value) {
$referral = UrsUserReferral::find($this->getKey());
$userMapping = UrsUserMapping::where('urs_user_id', $referral->urs_user_id)
->where('status', UrsUserMapping::STATUS_VALID)
->with('user')
->first();
return $userMapping && $userMapping->user ? $userMapping->user->username : '未进入农场';
});