| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
- namespace App\Models;
- /*
- * Setting — key-value хранилище настроек сайта.
- *
- * Таблица: settings | Ключи: phone, email, telegram, youtube, vk
- * get(key, default) — получить значение по ключу (через кеш 24ч)
- * set(key, value) — сохранить значение и сбросить кеш
- * all() — все настройки как ассоциативный массив (через кеш)
- */
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\Cache;
- class Setting extends Model
- {
- protected $fillable = ['key', 'value'];
- private const CACHE_KEY = 'site_settings';
- private const CACHE_TTL = 86400; // 24 часа
- // Возвращает все настройки как ['key' => 'value', ...].
- // Кешируем plain array, а не Collection — иначе file-кеш падает с __PHP_Incomplete_Class при unserialize.
- public static function all($columns = ['*']): Collection
- {
- $data = Cache::remember(self::CACHE_KEY, self::CACHE_TTL, function () {
- return parent::all(['key', 'value'])->pluck('value', 'key')->toArray();
- });
- return collect(is_array($data) ? $data : []);
- }
- // Получить одну настройку по ключу
- public static function get(string $key, string $default = ''): string
- {
- return static::all()[$key] ?? $default;
- }
- // Сохранить настройку и сбросить кеш
- public static function set(string $key, ?string $value): void
- {
- static::updateOrCreate(['key' => $key], ['value' => $value]);
- Cache::forget(self::CACHE_KEY);
- }
- // Сбросить кеш настроек (вызывается после массового сохранения)
- public static function clearCache(): void
- {
- Cache::forget(self::CACHE_KEY);
- }
- }
|