'integer', 'artwork_id' => 'integer', 'user_id' => 'integer', 'position' => 'integer', 'sort_order' => 'integer', 'awarded_by_user_id' => 'integer', 'awarded_at' => 'datetime', ]; } public static function supportedTypes(): array { return [ self::TYPE_WINNER, self::TYPE_FINALIST, self::TYPE_RUNNER_UP, self::TYPE_HONORABLE_MENTION, self::TYPE_FEATURED, ]; } public static function labelForType(string $type): string { return match ($type) { self::TYPE_WINNER => 'Winner', self::TYPE_FINALIST => 'Finalist', self::TYPE_RUNNER_UP => 'Runner-up', self::TYPE_HONORABLE_MENTION => 'Honorable Mention', self::TYPE_FEATURED => 'Featured', default => ucwords(str_replace('_', ' ', $type)), }; } public function challenge(): BelongsTo { return $this->belongsTo(GroupChallenge::class, 'group_challenge_id'); } public function artwork(): BelongsTo { return $this->belongsTo(Artwork::class); } public function user(): BelongsTo { return $this->belongsTo(User::class); } public function awardedBy(): BelongsTo { return $this->belongsTo(User::class, 'awarded_by_user_id'); } }