Characters::class, 'character_state' => CharacterState::class, 'experience_events' => 'array', ]; public function user(): BelongsTo { return $this->belongsTo(User::class); } public function archivedGame(): BelongsTo { return $this->belongsTo(ArchivedGame::class); } public static function archivePlayerProgression( Game $game, User &$user, bool $hasQuit, Characters $playedCharacter, CharacterState $characterState, int $gainedExperience, array $experienceEvents, int $gainedCurrencyA, int $gainedCurrencyB, int $gainedCurrencyC, ): void { if(ArchivedPlayerProgression::archivedPlayerExists($game->id, $user->id)) return; $archived = new ArchivedPlayerProgression(); $archived->user_id = $user->id; $archived->archived_game_id = $game->id; $archived->played_character = $playedCharacter; $archived->character_state = $characterState; $archived->has_quit = $hasQuit; $archived->gained_experience = $gainedExperience; $archived->experience_events = $experienceEvents; $archived->gained_currency_a = $gainedCurrencyA; $archived->gained_currency_b = $gainedCurrencyB; $archived->gained_currency_c = $gainedCurrencyC; $archived->save(); } public static function archivedPlayerExists(string $matchId, string $userId): bool { return ArchivedPlayerProgression::where('user_id', '=', $userId) ->where('archived_game_id', '=', $matchId) ->exists(); } }