self::GENDER_UNKNOWN, ]; /** * @var array */ protected $fillable = [ 'inviter_id', 'nickname', 'avatar', 'gender', 'birthday', 'depth', 'path', 'points', 'growth_value', 'real_inviter_id', 'is_company', 'invite_qrcode', ]; /** * @var array */ protected $casts = [ 'birthday' => 'date', ]; public static $genderTexts = [ self::GENDER_UNKNOWN => '未知', self::GENDER_MALE => '男性', self::GENDER_FEMALE => '女性', ]; /** * {@inheritdoc} */ protected static function booted() { parent::saving(function ($userInfo) { // 如果没有邀请码,则自动分配邀请码 if ($userInfo->code === null) { do { $userInfo->code = strtolower(Str::random(6)); } while (static::where('code', $userInfo->code)->exists()); } elseif ($userInfo->isDirty('code')) { $userInfo->code = strtolower($userInfo->code); } }); } /** * 用户 * * @return void */ public function user() { return $this->belongsTo(User::class); } /** * 获取此用户的邀请人信息 */ public function inviterInfo() { return $this->belongsTo(UserInfo::class, 'inviter_id'); } public function inviter() { return $this->belongsTo(User::class, 'inviter_id'); } /** * 获取此用户的真实邀请人信息 */ public function realInviterInfo() { return $this->belongsTo(UserInfo::class, 'real_inviter_id'); } public function inviteOrders() { return $this->hasMany(Order::class, 'inviter_id', 'user_id'); } public function inviteCompleteOrders() { return $this->hasMany(Order::class, 'inviter_id', 'user_id')->where('status', Order::STATUS_COMPLETED); } public function inviteUserInfos() { return $this->hasMany(UserInfo::class, 'inviter_id', 'user_id'); } /** * 获取此用户的所有父级ID * * @return array */ public function getParentIdsAttribute(): array { if ($path = trim($this->path, '-')) { return explode('-', $path); } return []; } public function getRealParentIdsAttribute(): array { $rpids = (array) $this->realInviterInfo?->parent_ids; if ($this->real_inviter_id) { array_push($rpids, $this->real_inviter_id); } return $rpids; } /** * 获取完整的邀请路径 * * @return string */ public function getFullPathAttribute(): string { return Str::finish($this->path.$this->getKey(), '-'); } }