GameRewardGroupRepository.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace App\Module\Game\Repositorys;
  3. use App\Module\Game\Models\GameRewardGroup;
  4. use Dcat\Admin\Repositories\EloquentRepository;
  5. /**
  6. * 奖励组数据仓库类
  7. *
  8. * 提供奖励组数据的访问和操作功能。
  9. * 该类是奖励组模块与后台管理系统的桥梁,用于处理奖励组数据的CRUD操作。
  10. */
  11. class GameRewardGroupRepository extends EloquentRepository
  12. {
  13. /**
  14. * 关联的Eloquent模型类
  15. *
  16. * @var string
  17. */
  18. protected $eloquentClass = GameRewardGroup::class;
  19. /**
  20. * 查询编辑页面数据
  21. *
  22. * @param \Dcat\Admin\Form $form
  23. * @return array|\Illuminate\Contracts\Support\Arrayable
  24. */
  25. public function edit(\Dcat\Admin\Form $form)
  26. {
  27. $model = parent::edit($form);
  28. // 处理标签关系,将Collection转换为ID数组
  29. if ($model instanceof GameRewardGroup && $model->relationLoaded('tags')) {
  30. // 将模型转换为数组,并处理tags字段
  31. $data = $model->toArray();
  32. $data['tags'] = $model->tags->pluck('id')->toArray();
  33. return $data;
  34. }
  35. return $model;
  36. }
  37. /**
  38. * 复制奖励组
  39. *
  40. * @param int $id 奖励组ID
  41. * @return GameRewardGroup
  42. */
  43. public function duplicate(int $id): GameRewardGroup
  44. {
  45. $group = $this->eloquentClass::with('rewardItems')->findOrFail($id);
  46. // 复制奖励组
  47. $newGroup = $group->replicate();
  48. $newGroup->name = $group->name . ' (复制)';
  49. $newGroup->code = $group->code . '_copy_' . time();
  50. $newGroup->save();
  51. // 复制奖励项
  52. foreach ($group->rewardItems as $item) {
  53. $newItem = $item->replicate();
  54. $newItem->group_id = $newGroup->id;
  55. $newItem->save();
  56. }
  57. return $newGroup;
  58. }
  59. }