51 lines
1.2 KiB
PHP
51 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class Setting extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $fillable = ['key', 'value', 'type'];
|
|
|
|
/**
|
|
* Get setting value by key, cast properly.
|
|
*/
|
|
public static function get(string $key, $default = null)
|
|
{
|
|
$setting = self::where('key', $key)->first();
|
|
if (!$setting) {
|
|
return $default;
|
|
}
|
|
|
|
return match($setting->type) {
|
|
'boolean' => filter_var($setting->value, FILTER_VALIDATE_BOOLEAN),
|
|
'integer' => (int) $setting->value,
|
|
'json' => json_decode($setting->value, true),
|
|
default => $setting->value,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Set a setting value.
|
|
*/
|
|
public static function set(string $key, $value, string $type = 'string')
|
|
{
|
|
if (is_array($value)) {
|
|
$value = json_encode($value);
|
|
$type = 'json';
|
|
} elseif (is_bool($value)) {
|
|
$value = $value ? '1' : '0';
|
|
$type = 'boolean';
|
|
}
|
|
|
|
return self::updateOrCreate(
|
|
['key' => $key],
|
|
['value' => $value, 'type' => $type]
|
|
);
|
|
}
|
|
}
|