$codes 邀请码列表 * @property-read \Illuminate\Database\Eloquent\Collection $orders 订单列表 * @property-read \Illuminate\Database\Eloquent\Collection $stat 统计信息 * @property-read \Illuminate\Database\Eloquent\Collection $tickets 工单列表 * @property-read User|null $parent 父账户 * @property-read string $subscribe_url 订阅链接(动态生成) */ class User extends Authenticatable { use HasApiTokens; protected $table = 'v2_user'; protected $dateFormat = 'U'; protected $guarded = ['id']; protected $casts = [ 'created_at' => 'timestamp', 'updated_at' => 'timestamp', 'banned' => 'integer', 'remind_expire' => 'boolean', 'remind_traffic' => 'boolean', 'commission_auto_check' => 'boolean', 'commission_rate' => 'float' ]; protected $hidden = ['password']; public const COMMISSION_TYPE_SYSTEM = 0; public const COMMISSION_TYPE_PERIOD = 1; public const COMMISSION_TYPE_ONETIME = 2; // 获取邀请人信息 public function invite_user(): BelongsTo { return $this->belongsTo(self::class, 'invite_user_id', 'id'); } /** * 获取用户订阅计划 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function plan(): BelongsTo { return $this->belongsTo(Plan::class, 'plan_id', 'id'); } public function group(): BelongsTo { return $this->belongsTo(ServerGroup::class, 'group_id', 'id'); } // 获取用户邀请码列表 public function codes(): HasMany { return $this->hasMany(InviteCode::class, 'user_id', 'id'); } public function orders(): HasMany { return $this->hasMany(Order::class, 'user_id', 'id'); } public function stat(): HasMany { return $this->hasMany(StatUser::class, 'user_id', 'id'); } // 关联工单列表 public function tickets(): HasMany { return $this->hasMany(Ticket::class, 'user_id', 'id'); } public function parent(): BelongsTo { return $this->belongsTo(self::class, 'parent_id', 'id'); } /** * 获取订阅链接属性 */ public function getSubscribeUrlAttribute(): string { return Helper::getSubscribeUrl($this->token); } }