42 lines
1.4 KiB
PHP
42 lines
1.4 KiB
PHP
<?php
|
|||
|
|
/**
|
||
|
|
* 「我自己的」设置 —— 键值对,挂在 person 上而不是 family 上。
|
||
|
|
*
|
||
|
|
* 为什么要有它(而不是复用 settings 表加个 person_id 列):
|
||
|
|
* `settings` 是**家庭级**的(系统 slogan、附件存储这些,改一次全家变),
|
||
|
|
* `user_settings` 是**个人级**的(我的分组顺序、以后可能还有我的界面偏好),
|
||
|
|
* 两者的作用范围完全不同。分开存,"改一个人的偏好"就不可能误伤到全家 ——
|
||
|
|
* 混在一张表里迟早有人忘了带 family 条件。
|
||
|
|
*
|
||
|
|
* 与 App\Setting 的关系:同构(都是 k/v),只是作用域不同。
|
||
|
|
*/
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace App;
|
||
|
|
|
||
|
|
final class UserSetting
|
||
|
|
{
|
||
|
|
public static function get(int $personId, string $key, $default = null)
|
||
|
|
{
|
||
|
|
if ($personId <= 0) {
|
||
|
|
return $default;
|
||
|
|
}
|
||
|
|
$st = Database::get()->prepare('SELECT v FROM user_settings WHERE person_id = ? AND k = ?');
|
||
|
|
$st->execute([$personId, $key]);
|
||
|
|
$v = $st->fetchColumn();
|
||
|
|
return $v === false ? $default : $v;
|
||
|
|
}
|
||
|
|
|
||
|
|
public static function set(int $personId, string $key, string $value): void
|
||
|
|
{
|
||
|
|
if ($personId <= 0) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
Database::get()->prepare(
|
||
|
|
'INSERT INTO user_settings (person_id, k, v) VALUES (?, ?, ?)
|
||
|
|
ON DUPLICATE KEY UPDATE v = VALUES(v)'
|
||
|
|
)->execute([$personId, $key, $value]);
|
||
|
|
}
|
||
|
|
}
|