'integer', 'cool_down' => 'integer', 'min_level' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; /** * 获取技能的使用记录 * * @return HasMany */ public function usageLogs(): HasMany { return $this->hasMany(PetSkillLog::class, 'skill_id'); } /** * 格式化持续时间显示 * * @param int $seconds 秒数 * @return string 友好的时间显示 */ public static function formatDuration(int $seconds): string { if ($seconds <= 0) { return '无持续时间'; } $days = floor($seconds / 86400); $hours = floor(($seconds % 86400) / 3600); $minutes = floor(($seconds % 3600) / 60); $remainingSeconds = $seconds % 60; $parts = []; if ($days > 0) { $parts[] = "{$days}天"; } if ($hours > 0) { $parts[] = "{$hours}小时"; } if ($minutes > 0) { $parts[] = "{$minutes}分钟"; } if ($remainingSeconds > 0 && empty($parts)) { // 只有在没有更大单位时才显示秒数 $parts[] = "{$remainingSeconds}秒"; } if (empty($parts)) { return '瞬间'; } $result = implode(' ', $parts); // 添加原始秒数的提示 $result .= "
({$seconds}秒)"; return $result; } /** * 获取格式化的持续时间 * * @return string */ public function getFormattedDurationTimeAttribute(): string { return self::formatDuration($this->duration_time); } /** * 获取格式化的冷却时间 * * @return string */ public function getFormattedCoolDownAttribute(): string { return self::formatDuration($this->cool_down); } }