From 693404cd55ad8a3dbbdd866c71ffb561626644c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Sat, 8 Jan 2022 16:10:24 +0800 Subject: [PATCH] Update settings --- app/Services/SettingService.php | 53 ++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/app/Services/SettingService.php b/app/Services/SettingService.php index a49ce281..22488fc2 100644 --- a/app/Services/SettingService.php +++ b/app/Services/SettingService.php @@ -6,7 +6,6 @@ use App\Models\Setting; use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Support\Arr; -use Throwable; class SettingService { @@ -39,25 +38,21 @@ class SettingService return $this->getMany($key); } - if (! array_key_exists($key, $this->items)) { + $_key = $this->getSettingKey($key); + + if (! array_key_exists($_key, $this->items)) { try { - $this->items[$key] = $this->cache->remember($this->cacheKey($key), $this->ttl, function () use ($key) { - $_key = $this->keyHandle($key); - $settings = Setting::where('key', $_key[0])->firstOrFail(); - if (isset($_key[1])) { - return Arr::get($settings->value, $_key[1]); - } else { - return $settings->value; - } + $this->items[$_key] = $this->cache->remember($this->cacheKey($_key), $this->ttl, function () use ($_key) { + $settings = Setting::where('key', $_key)->firstOrFail(); + + return $settings->value; }); } catch (ModelNotFoundException $e) { return $default; - } catch (Throwable $th) { - return $default; } } - return $this->items[$key]; + return Arr::get($this->items[$_key], $key, $default); } /** @@ -89,8 +84,20 @@ class SettingService $keys = is_array($key) ? $key : [$key => $value]; foreach ($keys as $key => $value) { - $_key = $this->keyHandle($key); - Setting::where('key', $_key[0])->update(['value->'.$_key[1] => $value]); + $_key = $this->getSettingKey($key); + + $setting = Setting::firstOrNew(['key' => $_key]); + + if (strpos($key, '.') === false) { + $setting->value = $value; + } else { + $json = [$_key => $setting->value]; + + data_set($json, $key, $value); + + $setting->value = $json[$_key]; + } + $setting->save(); $this->cleanCache($key); } @@ -116,8 +123,20 @@ class SettingService return "settings.{$key}"; } - protected function keyHandle(string $key) + /** + * 获取设置项的 key + * + * @param string $key + * @return string + */ + protected function getSettingKey(string $key): string { - return explode('.', $key); + if (strpos($key, '.') === false) { + return $key; + } + + $segments = explode($key, '.'); + + return $segments[0]; } }