ReferralApply.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace App\Models;
  3. use App\Casts\money;
  4. use App\Observers\ReferralApplyObserver;
  5. use App\Utils\Helpers;
  6. use Auth;
  7. use Illuminate\Database\Eloquent\Attributes\ObservedBy;
  8. use Illuminate\Database\Eloquent\Builder;
  9. use Illuminate\Database\Eloquent\Casts\Attribute;
  10. use Illuminate\Database\Eloquent\Model;
  11. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  12. /**
  13. * 返利申请.
  14. */
  15. #[ObservedBy([ReferralApplyObserver::class])]
  16. class ReferralApply extends Model
  17. {
  18. protected $table = 'referral_apply';
  19. protected $casts = ['before' => money::class, 'after' => money::class, 'amount' => money::class, 'link_logs' => 'array'];
  20. protected $guarded = [];
  21. public function scopeUid(Builder $query): Builder
  22. {
  23. return $query->whereUserId(Auth::id());
  24. }
  25. public function user(): BelongsTo
  26. {
  27. return $this->belongsTo(User::class);
  28. }
  29. public function referral_logs(): Builder
  30. {
  31. return ReferralLog::whereIn('id', $this->link_logs);
  32. }
  33. protected function amountTag(): Attribute
  34. {
  35. return Attribute::make(get: fn () => Helpers::getPriceTag($this->amount));
  36. }
  37. protected function statusLabel(): Attribute
  38. {
  39. return Attribute::make(get: fn () => match ($this->status) {
  40. 1 => '<span class="badge badge-sm badge-info">'.trans('common.status.pending').'</span>',
  41. 2 => trans('common.status.withdrawn'),
  42. default => '<span class="badge badge-sm badge-warning">'.trans('common.status.applying').'</span>',
  43. });
  44. }
  45. }