addMinutes(self::CACHE_TTL), fn () => MarriageConfig::where('key', $key)->value('value') ?? $default ); } /** * 批量读取同一分组所有配置(后台页面用)。 * * @param string $group 分组名 * @return Collection */ public function getGroup(string $group): Collection { return MarriageConfig::where('group', $group)->orderBy('id')->get(); } /** * 按分组名返回所有配置(后台页面用)。 * * @return Collection> */ public function allGrouped(): Collection { return Cache::remember( self::ALL_CACHE_KEY, now()->addMinutes(self::CACHE_TTL), fn () => MarriageConfig::orderBy('id')->get()->groupBy('group') ); } /** * 写入单个配置值,并清除相关缓存。 * * @param string $key 配置键名 * @param int $value 新值 */ public function set(string $key, int $value): bool { $rows = MarriageConfig::where('key', $key)->update(['value' => $value]); // 清除单项缓存及全量缓存 Cache::forget(self::CACHE_PREFIX.$key); Cache::forget(self::ALL_CACHE_KEY); return $rows > 0; } /** * 批量写入配置(后台表单批量保存,接受 ['key' => value] 格式)。 * * @param array $data 键值对 */ public function batchSet(array $data): void { foreach ($data as $key => $value) { $this->set($key, (int) $value); } } /** * 清除全部婚姻配置缓存(迁移/重新 Seed 后调用)。 */ public function clearAll(): void { $keys = MarriageConfig::pluck('key'); foreach ($keys as $key) { Cache::forget(self::CACHE_PREFIX.$key); } Cache::forget(self::ALL_CACHE_KEY); } }