UrsUserReferral.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace App\Module\UrsPromotion\Models;
  3. use UCore\ModelCore;
  4. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  5. /**
  6. * URS用户推荐关系模型
  7. *
  8. * field start
  9. * @property int $id 主键ID
  10. * @property int $urs_user_id URS用户ID
  11. * @property int $urs_referrer_id URS推荐人ID
  12. * @property int $user_id 农场用户ID(可能为0)
  13. * @property int $referrer_id 推荐人的农场用户ID(可能为0)
  14. * @property \Carbon\Carbon $referral_time 推荐时间
  15. * @property int $status 状态:1有效,0无效
  16. * @property \Carbon\Carbon $created_at 创建时间
  17. * @property \Carbon\Carbon $updated_at 更新时间
  18. * field end
  19. *
  20. * @property-read User $user 用户
  21. * @property-read User $referrer 推荐人
  22. */
  23. class UrsUserReferral extends ModelCore
  24. {
  25. /**
  26. * 数据库表名
  27. */
  28. protected $table = 'urs_promotion_user_referrals';
  29. /**
  30. * 可批量赋值的属性
  31. */
  32. protected $fillable = [
  33. 'urs_user_id',
  34. 'urs_referrer_id',
  35. 'user_id',
  36. 'referrer_id',
  37. 'referral_time',
  38. 'status',
  39. ];
  40. /**
  41. * 属性类型转换
  42. */
  43. protected $casts = [
  44. 'urs_user_id' => 'integer',
  45. 'urs_referrer_id' => 'integer',
  46. 'user_id' => 'integer',
  47. 'referrer_id' => 'integer',
  48. 'referral_time' => 'datetime',
  49. 'status' => 'integer',
  50. 'created_at' => 'datetime',
  51. 'updated_at' => 'datetime',
  52. ];
  53. /**
  54. * 状态常量
  55. */
  56. const STATUS_INVALID = 0; // 无效
  57. const STATUS_VALID = 1; // 有效
  58. /**
  59. * 获取用户映射关系
  60. */
  61. public function userMapping(): BelongsTo
  62. {
  63. return $this->belongsTo(UrsUserMapping::class, 'urs_user_id', 'urs_user_id');
  64. }
  65. /**
  66. * 获取推荐人映射关系
  67. */
  68. public function referrerMapping(): BelongsTo
  69. {
  70. return $this->belongsTo(UrsUserMapping::class, 'urs_referrer_id', 'urs_user_id');
  71. }
  72. /**
  73. * 获取农场用户信息(通过映射关系)
  74. */
  75. public function farmUser()
  76. {
  77. return $this->userMapping()->with('user.info');
  78. }
  79. /**
  80. * 获取推荐人农场用户信息(通过映射关系)
  81. */
  82. public function referrerFarmUser()
  83. {
  84. return $this->referrerMapping()->with('user.info');
  85. }
  86. /**
  87. * 获取农场用户信息(直接关联)
  88. */
  89. public function user(): BelongsTo
  90. {
  91. return $this->belongsTo(\App\Module\User\Models\User::class, 'user_id');
  92. }
  93. /**
  94. * 获取推荐人农场用户信息(直接关联)
  95. */
  96. public function referrer(): BelongsTo
  97. {
  98. return $this->belongsTo(\App\Module\User\Models\User::class, 'referrer_id');
  99. }
  100. /**
  101. * 检查推荐关系是否有效
  102. */
  103. public function isValid(): bool
  104. {
  105. return $this->status === self::STATUS_VALID;
  106. }
  107. /**
  108. * 设置为有效状态
  109. */
  110. public function setValid(): void
  111. {
  112. $this->status = self::STATUS_VALID;
  113. }
  114. /**
  115. * 设置为无效状态
  116. */
  117. public function setInvalid(): void
  118. {
  119. $this->status = self::STATUS_INVALID;
  120. }
  121. /**
  122. * 获取状态文本
  123. */
  124. public function getStatusText(): string
  125. {
  126. return match($this->status) {
  127. self::STATUS_VALID => '有效',
  128. self::STATUS_INVALID => '无效',
  129. default => '未知',
  130. };
  131. }
  132. }