php 存储用户设置的有用架构有哪些?

uhry853o  于 2023-01-19  发布在  PHP
关注(0)|答案(2)|浏览(137)

我想存储一些用户设置,我想到了3个选项,因为这是我的第一个项目,我想以正确的方式开始它,我不知道这是最佳的方式。
1.将单个设置直接存储在用户表的列中
1.拥有一个包含setting_name、setting_value和user_id列的user_settings表
1.将JSON字符串存储在用户表中名为“user_settings_json”的列中
在一次设计分析中,我注意到wordpress将它存储在一个单独的表中,但我不确定这对每个应用程序都是必要的(因为我的应用程序没有wp那么多的用户设置)
我用的是Laravel,PHP,javascript/jquery.
从设计、可维护性和性能方面来看,你们认为哪一种最有用,总体上更好?

m0rkklqb

m0rkklqb1#

存储JSON字符串?不!
你想能够隔离设置,只需查询你需要的。因此,保持它在单独的列中!
至于你是否需要做一个单独的表的问题,不,你不需要。当你刚刚得到一些简单的设置,你可以只添加列到现有的用户表。注意这里的限制。如果你确实需要高级设置,我建议使用一个单独的表。最好不要太早。不是每个设置都适用于每个用户。例如,当您'我有高级帐户,他们可以有更多的设置。所以,保持它分开是我会做的。
顺便说一句,如果列已经在名称中包含“setting”的单独表中,我不会让它们以“setting_”开头。
结论:备选案文2:)

5f0d552i

5f0d552i2#

最近我为我的项目做了一个包,它使用Laravel 9,它允许你添加设置到任何Laravel模型。它可以将值转换为原始类型,如bool,int,也可以转换为自定义类。

$user->settings->get('is_gamer');
$user->settings->set('games_count', 10);

// or global site scoped
Settings::get('display_annoucement');

// more advanced usage with definition of custom class
$address = $user->settings->get('address');
$address->country = 'Poland';
$address->zip = '11-222';
$address->city = 'Warsaw';
$user->settings->put('address', $address);

// any model that implements trait
$article->settings->get('show_breadcrumbs');
$post->settings->get('allow_replies');

你可以在这里找到它:https://github.com/npabisz/laravel-settings

相关问题