Setting.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace App\Models;
  3. /*
  4. * Setting — key-value хранилище настроек сайта.
  5. *
  6. * Таблица: settings | Ключи: phone, email, telegram, youtube, vk
  7. * get(key, default) — получить значение по ключу (через кеш 24ч)
  8. * set(key, value) — сохранить значение и сбросить кеш
  9. * all() — все настройки как ассоциативный массив (через кеш)
  10. */
  11. use Illuminate\Database\Eloquent\Model;
  12. use Illuminate\Support\Collection;
  13. use Illuminate\Support\Facades\Cache;
  14. class Setting extends Model
  15. {
  16. protected $fillable = ['key', 'value'];
  17. private const CACHE_KEY = 'site_settings';
  18. private const CACHE_TTL = 86400; // 24 часа
  19. // Возвращает все настройки как ['key' => 'value', ...].
  20. // Кешируем plain array, а не Collection — иначе file-кеш падает с __PHP_Incomplete_Class при unserialize.
  21. public static function all($columns = ['*']): Collection
  22. {
  23. $data = Cache::remember(self::CACHE_KEY, self::CACHE_TTL, function () {
  24. return parent::all(['key', 'value'])->pluck('value', 'key')->toArray();
  25. });
  26. return collect(is_array($data) ? $data : []);
  27. }
  28. // Получить одну настройку по ключу
  29. public static function get(string $key, string $default = ''): string
  30. {
  31. return static::all()[$key] ?? $default;
  32. }
  33. // Сохранить настройку и сбросить кеш
  34. public static function set(string $key, ?string $value): void
  35. {
  36. static::updateOrCreate(['key' => $key], ['value' => $value]);
  37. Cache::forget(self::CACHE_KEY);
  38. }
  39. // Сбросить кеш настроек (вызывается после массового сохранения)
  40. public static function clearCache(): void
  41. {
  42. Cache::forget(self::CACHE_KEY);
  43. }
  44. }