portrait_images) { return null; } $images = is_string($this->portrait_images) ? json_decode($this->portrait_images, true) : $this->portrait_images; return array_map(function ($image) { return "/api/download?filename={$image}&bucket=user-avatar"; }, $images); } /** * 获取身份证照片完整URL */ public function getIdCardImagesUrlAttribute(): ?array { if (!$this->id_card_images) { return null; } $images = is_string($this->id_card_images) ? json_decode($this->id_card_images, true) : $this->id_card_images; return array_map(function ($image) { return "/api/download?filename={$image}&bucket=user-avatar"; }, $images); } /** * 获取从业资格证完整URL */ public function getQualPhotoUrlAttribute(): ?string { return $this->qual_photo ? "/api/download?filename={$this->qual_photo}&bucket=user-avatar" : null; } /** * 获取营业执照完整URL */ public function getBusinessLicenseUrlAttribute(): ?string { return $this->business_license ? "/api/download?filename={$this->business_license}&bucket=user-avatar" : null; } /** * 获取健康证完整URL */ public function getHealthCertificateUrlAttribute(): ?string { return $this->health_certificate ? "/api/download?filename={$this->health_certificate}&bucket=user-avatar" : null; } /** * 获取头像完整URL */ public function getAvatarUrlAttribute(): ?string { return $this->avatar ? "/api/download?filename={$this->avatar}&bucket=user-avatar" : null; } /** * 关联技师用户 */ public function coach() { return $this->belongsTo(CoachUser::class, 'coach_id', 'id'); } }