'array']; } protected static function booted(): void { static::saved(fn (Setting $setting) => Cache::forget(self::cacheKey($setting->key))); static::deleted(fn (Setting $setting) => Cache::forget(self::cacheKey($setting->key))); } public static function get(string $key, mixed $default = null): mixed { $value = Cache::rememberForever( self::cacheKey($key), // Wrapped in an array so a legitimately null value is cached as // "known to be null" rather than re-queried on every request. fn () => ['v' => self::query()->find($key)?->value], ); return $value['v'] ?? $default; } public static function set(string $key, mixed $value): void { self::query()->updateOrCreate(['key' => $key], ['value' => $value]); Cache::forget(self::cacheKey($key)); } public static function forget(string $key): void { self::query()->whereKey($key)->delete(); Cache::forget(self::cacheKey($key)); } protected static function cacheKey(string $key): string { return "settings:{$key}"; } }